代码之家  ›  专栏  ›  技术社区  ›  Tom Chiverton

带筛选器的布尔查询不返回任何文档

  •  0
  • Tom Chiverton  · 技术社区  · 7 年前

    简单查询

    "query": {
        "simple_query_string": { "query":"great guide" } 
    },
    

    按预期返回我的文档,其中包含

    "groups": [
            "Local Business"
    ],
    

    但如果我使用过滤器,它不会返回任何文档:

    "query": {
            "bool":{
                "must":[
                     {"simple_query_string": { "query":"great guide" }} 
                ],
                "filter":{
                  "terms":{
                    "groups":["Local Business"]
                  }
                }
            }
        },
    

    为什么筛选器与文档不匹配?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Kamal Kunjapur    7 年前

    groups 字段的类型为 keyword

    然而,如果这个领域 text

    组类型文本的查询

    POST <your_index_name>/_search
    {  
       "query":{  
          "bool":{  
             "must":[  
                {  
                   "simple_query_string":{  
                      "query":"great guide"
                   }
                }
             ],
             "filter":{  
                "match":{  
                   "groups":"Local Business"
                }
             }
          }
       }
    }
    

    您提到的查询不适用于类型为的字段的原因 text 是因为这片土地 Analysis 相位利用 Standard Analyzer 默认情况下,它将首先转换为 Local Business 放入小箱子,然后保存 local business 作为倒装索引中的两个独立单词。

    Elasticsearch只会在您查询的单词与索引中的可用单词匹配时提供结果。

    还有什么 keyword 本地业务 就像倒排索引一样。

    注: 您可以通过替换 groups.keyword 如果映射尚未定义并且是动态创建的。

    希望这有帮助!