在这种情况下,您可能需要查看 ngram 类型的解决方案。
Ngram 做了这样的事情:
鉴于文本 abcd 并使用 ngram 进行分析,您可能会得到标记:
a
ab
abc
abcd
b
bc
bcd
c
cd
d
以下是可能适合您的设置。
您可能需要修改过滤器部分。这个特殊的过滤器创建最多 12 个单位长的克和至少两个标记。
现在,如果您需要它对雪球给您的进一步分析(如水、水、浇水都与令牌水相匹配),您将需要进一步修改。
"filter": {
"ngram_filter": {
"type": "nGram",
"min_gram": 2,
"max_gram": 12
}
},
"analyzer": {
"ngram_index": {
"filter": [
"lowercase",
"ngram_filter"
],
"tokenizer": "keyword"
},
"ngram_search": {
"filter": [
"lowercase"
],
"tokenizer": "keyword"
}
}
},
这里的想法是在索引时间创建正确的令牌以在搜索时间可用。但是,您在搜索时需要做的就是使这些令牌可用。您无需再次重新应用 ngram 分析器。
编辑:
我刚刚注意到的最后一件事,这个要求:“ExxonMobil”应该匹配“exxon mobil”
可能意味着您需要执行以下操作:
"ngram_search": {
"filter": [
"lowercase"
],
"tokenizer": "whitespace"
}
注意添加了“空白”标记器而不是关键字。这允许搜索在空白处拆分。