问题描述
我有包含不同字段的不同索引。我试图弄清楚如何从所有索引和所有字段中获取建议。我知道使用 GET /_all/_search
我可以通过所有索引搜索结果。但是如何从所有索引和所有字段中获取所有建议?因为我想要一个像谷歌这样的功能“你的意思是:建议”
所以,我试过了:
GET /_all/_search
{
"query" : {
"multi_match" : {
"query" : "berlin"
}
},"suggest" : {
"text" : "berlin","my-suggest-1" : {
"term" : {
"field" : "street"
}
},"my-suggest-2" : {
"term" : {
"field" : "city"
}
},"my-suggest-3" : {
"term" : {
"field" : "description"
}
}
}
}
“my-suggest-1”和“-2”属于索引地址(见下文),“my-suggest-3”属于索引产品。我收到以下错误:
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception","reason" : "no mapping found for field [street]"
},{
"type" : "illegal_argument_exception","reason" : "no mapping found for field [city]"
},"reason" : "no mapping found for field [description]"
}
]
}
但如果我只使用 1 个索引的字段,我会得到建议,请参阅:
GET /_all/_search
{
"query" : {
"multi_match" : {
"query" : "berlin"
}
},"my-suggest-2" : {
"term" : {
"field" : "city"
}
}
}
}
...
"failures" : {
...
},"hits" : {
...
}
"suggest" : {
"my-suggest-1" : [
{
"text" : "berlin","offset" : 0,"length" : 10,"options" : [
{
"text" : "berliner","score" : 0.9,"freq" : 12
},{
"text" : "berlinger","freq" : 1
}
]
}
],"my-suggest-2" : [
{
"text" : "berlin","options" : []
}
]
...
我不知道如何从索引地址和产品中获取建议?如果有人可以帮助我,我会很高兴。
索引 1 - 地址:
"address" : {
"aliases" : {
....
},"mappings" : {
"dynamic" : "strict","properties" : {
"_entity_type" : {
"type" : "keyword","index" : false
},"street" : {
"type" : "text"
},"city" : {
"type" : "text"
}
}
},"settings" : {
...
}
}
索引 2 - 产品:
"product" : {
"aliases" : {
...
},"description" : {
"type" : "text"
}
}
},"settings" : {
...
}
}
解决方法
您可以在搜索中添加多个索引。在这种情况下,您需要搜索所有索引上存在的字段。因此,在您的情况下,您需要在两个索引中定义所有三个字段。字段“street”和“city”被填入第一个索引,而字段“description”只填入第二个索引。这将是您对“地址”索引的映射。在该索引中,“描述”字段存在但没有数据。在第二个索引中,“street”和“city”存在但没有数据。
"address" : {
"aliases" : {
....
},"mappings" : {
"dynamic" : "strict","properties" : {
"_entity_type" : {
"type" : "keyword","index" : false
},"street" : {
"type" : "text"
},"city" : {
"type" : "text"
},"description" : {
"type" : "text"
}
}
},"settings" : {
...
}
}