elasticsearch版本:6.4
这是我当前的数据:
我要搜索名称为Xbox的产品。我使用的是match关键字,但这不起作用。
下面是我的弹性搜索查询:
{
"query": {
"bool": {
"must": [
{
"match": {
"name": {
"query": "xbox"
}
}
},
{
"terms": {
"deep_sub": [
"Konsol Oyunları",
"Konsol Aksesuarları"
]
}
}
]
}
},
"from": 0,
"size": 50
}
答案 0 :(得分:0)
每当您遇到此类问题时,请尝试细分查询。您有Match Query和Term Query。分别运行它们两个,看看有什么不起作用。
据我了解,您的deep_sub字段看起来是text
类型的,这意味着术语查询未返回结果。
您需要使用keyword
类型的创建它的同级同等物,然后在其上运行术语查询以进行精确匹配。
在上面的链接中,我们具有以下信息:
只能通过关键字的确切值来搜索关键字字段。
如果您不控制映射,即如果您的映射为动态类型,则必须具有其同级等效关键字字段,即deep_sub.keyword
您可以通过运行GET <your_index_name>/_mapping
您的查询如下:
POST <your_index_name>/_search
{
"query":{
"bool":{
"must":[
{
"match":{
"name":{
"query":"xbox"
}
}
},
{
"terms":{
"deep_sub.keyword":[ <----- Change This
"Konsol Oyunları",
"Konsol Aksesuarları"
]
}
}
]
}
},
"from":0,
"size":50
}
让我知道这是否有帮助!