Elasticsearch 在文本字段中搜索正斜杠

分享于2022年10月08日 elasticsearch lucene 问答
【问题标题】:Elasticsearch search on forward slash in text fieldElasticsearch 在文本字段中搜索正斜杠
【发布时间】:2022-07-25 19:07:20
【问题描述】:

Elasticsearch 映射:

  "description": {
    "type": "text",
    "analyzer": "eng_stemmer",
    "fields": {
      "exact": {
        "type": "text",
        "analyzer": "exact_lowercase"
      }
    }
  }

分析员:

    "eng_stemmer": {
      "tokenizer": "standard",
      "char_filter": [ "html_strip" ],
      "filter": [
        "english_possessive_stemmer",
        "lowercase",
        "english_stemmer"
      ]
    },
    "exact_lowercase": {
      "tokenizer": "keyword",
      "char_filter": [ "html_strip" ],
      "filter": [
        "lowercase"
      ]
    }

我对 Elasticsearch 比较陌生,并尝试在文本字段中搜索“C/C”。 以下查询似乎不起作用,它返回的结果太多(似乎在'c c'上搜索):

{
 "query": {
   "query_string": {
     "default_field": "description",
     "query": "C\\/C"
   }
 }
}

Elasticsearch 似乎正在从我的搜索查询中删除正斜杠。 我也尝试过使用关键字字段,但收到以下错误消息(因为字段太长?):

Document contains at least one immense term in field=\"description.exact\" (whose UTF8 encoding is longer than the max length 32766), all of which were skipped.

关于如何在分析的文本字段中搜索保留字符有什么想法吗?


【解决方案1】:

您正在使用标准标记器, standard tokenizer 提供基于语法的标记化(基于 Unicode 文本分段算法,如 Unicode 标准附件 #29 中所述)。它将从您的查询和索引过程中删除所有斜杠。

你有什么更好的选择来使用 Whitespace tokenizer 来解决这个问题,更多信息请查看 Elasticsearch 官方文档 here

【讨论】: