elasticsearch,boolean,Search,elasticsearch,Boolean" /> elasticsearch,boolean,Search,elasticsearch,Boolean" />

ElasticSearch |布尔查询

ElasticSearch |布尔查询,search,elasticsearch,boolean,Search,elasticsearch,Boolean,我正在使用bool查询“必须”和“不得”功能。在我到达一个三层楼深的地方之前,它一直在按预期工作。例如,一个简单的匹配查询,如 GET city/town/_search { "query": { "match": { "contact.residence.address": "Rocky Road" } } } 工作正常并返回结果,但如果我在bool查询中执行相同的操作,如 GET city/town/_search

我正在使用bool查询“必须”和“不得”功能。在我到达一个三层楼深的地方之前,它一直在按预期工作。例如,一个简单的匹配查询,如

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"
               }
            }
         ]
      }
   }
}
不返回任何结果。这是为什么?????记住其他bool查询,例如

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

干得很好!它只适用于3级深度的任何字段,因此搜索任何术语prop1.prop3.prop3

原因是第一次搜索使用
匹配
查询,而另一次搜索使用
术语
查询。不同之处在于
match
query将analyzer应用于提供正确术语的输入<代码>术语查询不会分析您的输入,而是将其作为单个术语使用。对于像“Hendersons”这样的输入,它可能会给出相同的结果,但对于“Rocky Road”输入,它必须分为两个术语,因此必须使用
match
query

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

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

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

您可能有
contact.residence.address
字段映射为
text
类型。如果是这种情况,那么在第二个查询中将
术语
替换为
匹配
,将按预期工作。我建议您阅读该部分,为什么术语查询与我的文档不匹配?在正式文档中。您可能有
contact.residence.address
字段映射为
text
类型。如果是这种情况,那么在第二个查询中将
术语
替换为
匹配
,将按预期工作。我建议您阅读该部分,为什么术语查询与我的文档不匹配?在官方文件中。工作得很有魅力。非常感谢。工作得很有魅力。非常感谢。