将搜索结果缩小到多个类别

时间:2016-02-27 00:36:35

标签: elasticsearch

我正在尝试将搜索结果缩小到任何给定类别。 我的搜索主体,适用于elasticsearch 2.2.0

{
   "filter":{
      "bool":{
         "should":[
            {
               "match":{
                  "categories":"16310211"
               }
            },
            {
               "match":{
                  "categories":"493964"
               }
            }
         ]
      }
   },
   "size":25,
   "from":0
}

但是现在我们正在使用AWS托管服务,他们只提供1.5.6的支持。当我运行相同的代码时,我收到了一个http 400错误的请求。如何通过1.5.6?

的多个标准(一个或多个)来实现过滤结果的相同效果

1 个答案:

答案 0 :(得分:1)

如果您承诺使用多个match个查询,则需要将它们与bool 查询结合使用。试试这个:

{
   "query":{        <--- use query here instead of filter
      "bool":{
         "should":[
            {
               "match":{
                  "categories":"16310211"
               }
            },
            {
               "match":{
                  "categories":"493964"
               }
            }
         ]
      }
   },
   "size":25,
   "from":0
}

但是,通常match查询用于进行全文搜索。看起来您的“类别”是准确的值。我建议使用term过滤器来代替此类数据。您可以通过以下方式获得更好的体验:

{
  "query":{
    "filtered":{
      "filter":{
        "bool":{
          "should":[
            { "term":{"categories":"16310211"} },
            { "term":{"categories":"493964"} }
          ]
        }
      }
    }
  },
  "size":25,
  "from":0
}