在我的业务中,我们经常使用“rtu-2004-t89”格式的代码进行操作。该代码始终以“rtu”开头,然后有各种字母和数字的组合。这些代码经常出现在我们索引到elasticsearch 的内容中。
不幸的是,在索引过程中,分词器使用破折号字符作为分隔符将这些代码分解为单独的单词。
因此,当用户想要搜索此代码时,他们不会得到正确的结果。
如何编写自己的标记生成器,以便它不会将这些代码分解为单独的标记?
您只需使用默认弹性搜索中使用空格标记生成器的关键字。不要忘记添加小写规范化器,以便用户更轻松地使用小写进行搜索。
举个例子:
这里是映射
"sku": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"normalizer": "lowercase_normalizer"
}
}
}
您必须在索引设置中添加标准化器,如下所示:
"normalizer": {
"lowercase_normalizer": {
"filter": [
"lowercase"
],
"type": "custom"
}
}
完成设置和映射后。查询应该是这样的,对于我使用 match 的示例。你可以改变任何你想要的:
"match": {
"sku.keyword": {
"query": "rtu-2024..."
}
}