假设我有一个包含以下内容的字段的文档:5W30 QUARTZ INEO MC 3 5L
用户希望能够搜索 MC3
(没有空格)并获取文件;但是,请搜索 MC 3
(带空格)也应该工作。此外,可能存在内容不包含空格的文档,并且在使用空格进行查询时应该找到这些文档。
我尝试了不带空格的索引(例如 5W30QUARTZINEOMC35L
),但这并没有真正起作用,因为使用通配符搜索我会匹配太多,例如MC35 也会匹配,我只想匹配连接在一起的两个精确单词(以及精确的单个单词)。
到目前为止,我正在考虑另外索引两个单词的所有组合,例如5W30QUARTZ
, QUARTZINEO
, INEOMC
, MC3
, 35L
.但是,Elasticsearch 是否有针对此的原生解决方案?
最佳答案
我很确定你想要的可以用 shingle token filter 来完成。 .根据您的映射,我想您需要在内容字段中添加一个看起来像这样的过滤器,以使您的 token 成对索引:
"filter_shingle":{
"type":"shingle",
"max_shingle_size":2,
"min_shingle_size":2,
"output_unigrams":"true"
}
请注意,这也已经是默认配置,我只是为了清楚起见添加了它。
关于elasticsearch - 将两个单词作为一个单词进行加工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60486596/