search - ElasticSearch | boolean 查询

标签 search elasticsearch boolean

我正在将bool查询用于“must”和“must_not”功能。它可以按预期工作,直到到达3级深的属性为止。例如简单的匹配查询,例如...

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

}

工作正常,并返回结果,但是如果我在..这样的 bool(boolean) 查询中执行相同的操作
GET city/town/_search
{
   "query": {
      "bool": {
         "must": [
            {
               "term": {
                  "contact.residence.address": "Rocky Road"
               }
            }
         ]
      }
   }
}

返回没有结果。为什么是这样?????请记住其他 bool(boolean) 查询,例如..
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"
               }
            }
         ]
      }
   }
}

关于search - ElasticSearch | boolean 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43216657/

相关文章:

elasticsearch - 如何在 ElasticSearch 中展平深度聚合?

php - 异常的PHP字符串长度以及使用PHP搜索Elasticsearch时

C99 - 为什么 false 和 true 定义为 0 和 1 而不是 ((bool)0) 和 ((bool)1)?

java - 为什么我会收到 java.util.InputMismatchException?

iphone - 如何在 iPhone 应用程序的数据库中实现搜索系统

php - 使用 php 和 mysql 进行搜索

search - 有人知道免费网站搜索吗?

c# - 正则表达式有条件地解析文件名和部分路径

elasticsearch - elasticsearch短语_前缀预期结果

c++ - 为什么总是得到相同的 boolean 值?