我有一些文档要在 ElasticSearch 中编制索引,其中包含一个名为 name
的文本字段。我目前使用 snowball
分析器为名称编制索引。但是,我想匹配包含和不包含空格的名称。例如,名称为“The Home Depot”的文档应匹配“homedepot”、“home”和“home depot”。此外,具有单个单词名称(如“ExxonMobil”)的文档应匹配“exxon mobil”和“exxonmobil”。
我似乎找不到合适的分析器/过滤器组合来完成此任务。
最佳答案
我认为解决这个问题最直接的方法是应用 Shingle token filter ,它不是创建字符的 ngram,而是创建传入标记的组合。您可以将它添加到分析器中,例如:
filter:
........
my_shingle_filter:
type: shingle
min_shingle_size: 2
max_shingle_size: 3
output_unigrams: true
token_separator: ""
你应该注意这个过滤器在你的过滤器链中的位置。在所有 token 分离/删除/替换已经发生之后(即在任何 StopFilters、SynonymFilters、词干分析器等之后),它可能应该出现在链的后期。
关于lucene - 在 ElasticSearch 中匹配缺失的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052212/