Elasticsearch使用“应”和“术语查询”返回所有结果

时间:2017-05-12 16:37:41

标签: elasticsearch

我想在Elasticsearch

中执行以下查询

SELECT * FROM TABLE WHERE feed_id =1 AND brand='Samsung' OR brand='Apple iPhone'

我使用了这个JSON查询

``

"bool" : {



 "should":[
    {
        "multi_match":
            {
            "query":"LG",
            "operator":"and",
            "fields":"brand"
            }
    },

        {
        "multi_match":
            {
            "query":"Samsung",
            "operator":"and",
            "fields":"brand"
            }
    },

    {
        "multi_match":
    {
        "query":"Nokia",
        "operator":"and",
        "fields":"brand"
    }
    }


    ],



     "filter": {
      "bool": { 
          "must": [

              { "term": { "feed_id":1}}
          ]

      }
    }

}``

这将返回所有结果..

这是我的映射

"model": { "type": "text", "fields": { "autocomplete": { "type": "text", "analyzer": "autocomplete" }, "keyword": { "type": "keyword" } } }

然而,当我删除"过滤器"我得到了预期的结果。

我的查询有什么问题?

我使用ES 5.0

2 个答案:

答案 0 :(得分:0)

尝试此查询。当你在一个字段上搜索时,不要认为你需要multi_match

{
 "query": {
  "bool": {
     "must": [
        {
           "term": {
              "feed_id": 1
           }
        },
        {
           "terms": {
              "brand": [
                 "LG",
                 "Samsung",
                 "Nokia"
              ]
           }
        }
       ]
    }
  }
 }

答案 1 :(得分:0)

现在有效:

我添加了minimum_should_match过滤器,现在它可以工作..

如果有人遇到同一问题,请查看查询

`

    {

        "multi_match":
            {
            "query":"Nokia",
            "operator":"and",
            "fields":"brand"
            }
    },

        {

        "multi_match":
            {
            "query":"Wifi",
            "operator":"and",
            "fields":"name"
            }
    },

    {
        "multi_match":
    {
        "query":"LG K10",
        "operator":"and",
        "fields":"name"
    }
    }


    ],
    "minimum_should_match":"1"

}