弹性搜索 |布尔查询



我正在使用布尔查询来表示"必须"和"must_not"功能。它按预期工作,直到我到达 3 层深的房产。例如,简单的匹配查询,例如...

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

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

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

返回"无结果"。这是为什么呢?????请记住其他布尔查询,例如..

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

工作就好!它仅适用于任何 3 级深度的字段,因此搜索任何 prop1.prop3.prop3 的术语

原因是第一个搜索使用match查询,而另一个搜索使用term查询。不同之处在于match查询将分析器应用于提供正确术语的输入。 term查询不会分析您的输入,而是将其用作单个字词。对于像"Hendersons"这样的输入,它可能给出相同的结果,但对于输入"Rocky Road",它必须拆分为两个术语,因此您必须使用match查询

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

最新更新