ElasticSearch | Bool查询

时间:2017-04-04 20:03:37

标签: search elasticsearch boolean

我正在使用bool查询来确定'必须'并且' must_not'特征。它按预期工作,直到我到达3级深的属性。例如一个简单的匹配查询,例如......

GET city/town/_search
{
    "query": {
        "match": {
            "contact.residence.address": "Rocky Road"
        }
    }

}

工作正常并返回结果,但如果我在bool查询中执行相同的操作,例如..

GET city/town/_search
{
   "query": {
      "bool": {
         "must": [
            {
               "term": {
                  "contact.residence.address": "Rocky Road"
               }
            }
         ]
      }
   }
}

返回NO结果。为什么是这样?????请记住其他bool查询,例如..

GET city/town/_search
{
   "query": {
      "bool": {
         "must": [
            {
               "term": {
                  "store.name": "Hendersons"
               }
            }
         ]
      }
   }
}

工作得很好!它仅适用于3级深度的任何字段,因此搜索任何名为prop1.prop3.prop3

的字段

1 个答案:

答案 0 :(得分:2)

原因是第一次搜索使用match查询,而另一次使用term查询。区别在于match查询将分析器应用于给出正确术语的输入。 term查询不会分析您的输入并将其用作单个术语。对于诸如" Hendersons"之类的输入,它可能会给出相同的结果。但是对于输入" Rocky Road"它必须分为两个术语,因此您必须使用match查询

GET city/town/_search
{
   "query": {
      "bool": {
         "must": [
            {
               "match": {
                  "contact.residence.address": "Rocky Road"
               }
            }
         ]
      }
   }
}