【问题标题】:Elastic search query not returning results弹性搜索查询不返回结果
【发布时间】:2021-02-10 01:08:57
【问题描述】:

我有一个未返回数据的弹性搜索查询。这是查询的 2 个示例 - 第一个有效并返回一些记录,但第二个不返回任何内容 - 我错过了什么?

示例 1 的工作原理:

curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match": {
      "data.case.field1": "ABC123"
    }
  }
}
'

示例 2 不起作用:

curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must": {
        "term" : { "data.case.field1" : "ABC123" }
      }
    }
  }
}
'

【问题讨论】:

    标签: elasticsearch elasticsearch-query term-query


    【解决方案1】:

    这是由于 matchterm 查询之间的差异而发生的,match 查询已分析,这意味着它对搜索词应用了相同的分析器,该分析器用于索引时的字段,而term 查询不被分析,并用于精确搜索,而search term 术语查询不经过analysis process

    term query的官方文档

    返回在提供的字段中包含确切术语的文档。

    match query官方文档

    返回与提供的文本、数字、日期或布尔值匹配的文档 价值。 在匹配之前分析提供的文本。

    如果您在没有任何显式分析器的情况下使用 data.case.field1 的文本字段,则将应用文本字段的默认分析器(标准),它将文本小写并存储结果标记。

    对于您的文本,标准分析器会生成以下标记,请参阅Analyze API 了解更多详细信息。

    {
        "text" : "ABC123",
        "analyzer" : "standard"
    }
    

    并生成令牌

    {
        "tokens": [
            {
                "token": "abc123",
                "start_offset": 0,
                "end_offset": 6,
                "type": "<ALPHANUM>",
                "position": 0
            }
        ]
    }
    

    现在,当您使用 term 查询作为搜索词时,将不会按原样分析和使用它,它是大写字符(ABC123),它与索引中的标记不匹配,因此不'不返回结果。

    PS:请参阅我的this SO answer,了解有关术语和匹配查询的更多详细信息。

    【讨论】:

      【解决方案2】:

      data.case.field1 的映射是什么?如果是 text 类型,您应该使用 ma​​tch 查询而不是 term

      查看本页顶部的警告:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html#query-dsl-term-query

      【讨论】:

        【解决方案3】:

        除非我们知道映射类型为textkeyword。在不知道所有涉及的变量的情况下,它是在黑暗中相对回答。也许您可以尝试以下方法。

        curl -X GET "localhost:9200/_search?pretty" -H 'Content-Type: application/json' -d'
        {
          "query": {
            "bool": {
              "filter": { <- Try this if you have datatype as keyword
                "term" : { "data.case.field1" : "ABC123" }
              }
            }
          }
        }
        

        '

        【讨论】:

          猜你喜欢
          • 2019-07-20
          • 1970-01-01
          • 2016-07-28
          • 1970-01-01
          • 2016-08-05
          • 1970-01-01
          • 2019-06-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多