【问题标题】:ElasticSearch config lowercase analyserElasticSearch 配置小写分析器
【发布时间】:2021-09-14 23:19:44
【问题描述】:

我尝试使用小写分析器创建索引器,如下所示:

{
  "settings": {
     ....
"analysis": {
  "analyzer": {
    "default": {
      "tokenizer": "keyword",
      "filter": "lowercase"
    }
  }
}
 },
  "mappings": {
"dynamic_templates": [
    ....
],
"properties": {
  // Properties list
     }
   }
}

但是当我用kibana搜索时,小写不起作用,它仍然区分大小写

我的查询喜欢:

GET A_INDEXER/_search
{
     "query": { 
      "bool": { 
      "must": [
          { "match": { "property1":   "jack"}}
          ]
      }
     }
}

【问题讨论】:

  • 仅供参考,它是 Elasticsearch,不是骆驼案 :)

标签: elasticsearch


【解决方案1】:

您是对的,匹配查询可用于不区分大小写的搜索,因为它应用了在索引时使用的相同分析器,但仅适用于文本字段。

这里的问题是,在建立索引时,由于您使用了关键字字段,因此用于匹配搜索查询标记的 elasticsearch 倒排索引中的标记不是小写的,因此根本不可能提供不区分大小写的搜索.

让我们通过一个例子来理解上面的语句:

假设您的文档中有 Foo BAR,您使用关键字字段对其进行索引。请注意每个字符的大小写,因此倒排索引将具有以下标记。

Foo BAR,现在在查询时通过一些钩子或骗子,您可以将搜索词转换为全部大写或小写,但在这种情况下它仍然与标记不匹配,因此您仍然会遇到很多问题搜索结果。

我建议,添加一个使用文本的新字段并使用 reindex API 创建一个新索引并以干净的方式实现它,也使用reindex API,您可以从旧索引构建一个新索引,而且速度更快建立一个新的索引,而不是从事实的来源(大多数情况下是 SQL)建立。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    相关资源
    最近更新 更多