带通配符的 Elasticsearch 不区分大小写的 query_string 查询

分享于2022年07月17日 elasticsearch 问答
【问题标题】:带通配符的 Elasticsearch 不区分大小写的 query_string 查询(Elasticsearch case-insensitive query_string query with wildcards)
【发布时间】:2022-01-25 18:04:35
【问题描述】:

在我的 ES 映射中,我有一个“uri”字段,该字段当前设置为 not_analysed,我不允许更改映射。我想使用这样的 query_string 查询搜索 uri 部分(此 ES 查询是自动生成的,这就是为什么它有点复杂,但我们只关注 query_string 部分)

{
  "sort": [{"updated": {"order": "desc"}}], 
   "query": {
     "bool": {
       "must":[{
         "query_string": {
           "query":"*w3\\.org\\/2014\\/01\\/a*", 
           "lowercase_expanded_terms": true, 
           "default_field": "uri"
         }
       }], 
       "minimum_number_should_match": 1
     }
   }, "size": 50}

现在它通常可以正常工作,但我存储了以下 url(虚构 url): http://w3.org/2014/01/Abc.html 并且由于 A-a 差异,此查询不会将其恢复。将扩展项设置为 false 也不能解决此问题。我应该怎么做才能让这个查询不区分大小写?

提前感谢您的帮助。

  • 我会说你需要改变映射来实现这个目标。你需要一个小写的映射,所以如果你不允许这样做,我不知道如何使它工作。当您将“lowercase_expanded_terms”设置为 false 时,您必须搜索的不是 '../a*' 而是 '../A*'。

【解决方案1】:

从文档看来,您似乎需要一个新的分析器,它首先转换为小写,然后可以运行搜索。你试过吗? http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/sorting-collations.html

在我阅读时,您的模式 lowercase_expanded_terms 仅适用于扩展,不适用于常规单词 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html lowercase_expanded_terms Whether terms of wildcard, prefix, fuzzy, and range queries are to be automatically lower-cased or not (since they are not analyzed). Default it true