使用过滤器无法获取数据(弹性搜索6.4)

时间:2019-04-21 19:49:27

标签: elasticsearch

elasticsearch版本:6.4

这是我当前的数据:

enter image description here

我要搜索名称为Xbox的产品。我使用的是match关键字,但这不起作用。

下面是我的弹性搜索查询:

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": {
                            "query": "xbox"
                        }
                    }
                },
                {
                    "terms": {
                        "deep_sub": [
                            "Konsol Oyunları",
                            "Konsol Aksesuarları"
                        ]
                    }
                }
            ]
        }
    },
    "from": 0,
    "size": 50
}

1 个答案:

答案 0 :(得分:0)

每当您遇到此类问题时,请尝试细分查询。您有Match QueryTerm 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
}

让我知道这是否有帮助!