【问题标题】:prefixQuery in Elastic search not working弹性搜索中的前缀查询不起作用
【发布时间】:2020-04-14 11:25:55
【问题描述】:
{
  "from": 0,
  "size": 100,
  "timeout": "10m",
  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "must": [
              {
                "bool": {
                  "filter": [
                    {
                      "bool": {
                        "must": [
                          {
                            "term": {
                              "input.custom_attrs.index": {
                                "value": "1",
                                "boost": 1
                              }
                            }
                          }
                        ]
                      }
                    },
                    {
                      "bool": {
                        "must": [
                          {
                            "prefix": {
                              "input.custom_attrs.value": {
                                "value": "An*",
                                "boost": 1
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

说明—— 我想搜索以“An”为前缀的字段。 此外,我确信存在价值为“Annual”和“Annual Fund”的数据,它们应该出现在所有匹配搜索中。 但是这些记录没有出现上面给出的前缀查询。我也尝试了正则表达式查询和通配符查询。但它们也不起作用。请就如何使查询工作提出宝贵的建议。

【问题讨论】:

    标签: elasticsearch elasticsearch-query


    【解决方案1】:

    无法正常工作的可能原因

    在索引数据时,您使用了默认映射或文本字段,它使用 default standard analyzer 将生成的标记转换为小写。

    虽然prefix queries are not analyzed 和搜索词不经过任何分析器,也不会被小写。

    在您的情况下,您正在搜索An,注意大写A,而对于AnnualAnnual fund,标记将是annualannualfund,因此它不匹配.

    解决方案:

    请使用an 作为您的前缀查询,您应该会得到您的搜索结果。

    【讨论】:

    • Opster Elasticsearch Ninja ,还是不行。
    • 它与 .* 与搜索字符串连接的 regexpquery 一起使用。在上面的查询中,我用下面的 json 元素替换了前缀 json 节点。 "regexp": { "input.custom_attrs.value": { "value": "An.*", "flags_value": 65535, "max_determinized_states": 10000, "boost": 1 } }
    • @shantamohapatra,不建议使用正则表达式查询,因为它可能非常昂贵,如果您可以提供映射和示例文档,我可以进一步排除故障并进行前缀查询以返回结果
    • @shantamohapatra,请查看最后一条评论,如果您需要更多信息,请告诉我,如果我们能用一些公认的答案来结束这个问题,那就太好了
    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多