首页 > 解决方案 > 弹性搜索中的前缀查询不起作用

问题描述

{
  "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”的数据,它们应该出现在所有匹配搜索中。但是这些记录没有出现上面给出的前缀查询。我也尝试了正则表达式查询和通配符查询。但它们也不起作用。请就如何使查询工作提出宝贵的建议。

标签: elasticsearchelasticsearch-query

解决方案


无法正常工作的可能原因

看起来在索引数据时您使用了默认映射或文本字段,它使用默认标准分析器将生成的标记转换为小写。

虽然不分析前缀查询并且搜索词不经过任何分析器并且不会被小写。

在您的情况下,您正在搜索An, note capital A,而 for Annualand Annual fund,标记将是annualand annualand fund,因此它不匹配。

解决方案:

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


推荐阅读