Elasticsearch 自定义分词器

问题描述 投票:0回答:1

在我的业务中,我们经常使用“rtu-2004-t89”格式的代码进行操作。该代码始终以“rtu”开头,然后有各种字母和数字的组合。这些代码经常出现在我们索引到elasticsearch 的内容中。

不幸的是,在索引过程中,分词器使用破折号字符作为分隔符将这些代码分解为单独的单词。

因此,当用户想要搜索此代码时,他们不会得到正确的结果。

如何编写自己的标记生成器,以便它不会将这些代码分解为单独的标记?

elasticsearch
1个回答
0
投票

您只需使用默认弹性搜索中使用空格标记生成器的关键字。不要忘记添加小写规范化器,以便用户更轻松地使用小写进行搜索。

举个例子:

这里是映射

"sku": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "normalizer": "lowercase_normalizer"
          }
        }
      }

您必须在索引设置中添加标准化器,如下所示:

"normalizer": {
        "lowercase_normalizer": {
          "filter": [
            "lowercase"
          ],
          "type": "custom"
        }
      }

完成设置和映射后。查询应该是这样的,对于我使用 match 的示例。你可以改变任何你想要的:

 "match": {
              "sku.keyword": {
                "query": "rtu-2024..."
              }
            }
© www.soinside.com 2019 - 2024. All rights reserved.