elasticsearch - 将两个单词作为一个单词进行加工
问题描述
考虑我有一个文档,其中包含以下内容的字段:5W30 QUARTZ INEO MC 3 5L
用户希望能够搜索MC3
(无空格)并获取文档;但是,搜索MC 3
(带空格)也应该有效。此外,可能存在内容不包含空格的文档,并且在使用空格进行查询时应该找到这些文档。
我尝试了不带空格的索引(例如5W30QUARTZINEOMC35L
),但这并没有真正起作用,因为使用通配符搜索我会匹配太多,例如 MC35 也会匹配,我只想匹配两个连接在一起的确切单词(以及确切的单个单词)。
到目前为止,我正在考虑另外索引两个单词的所有组合,例如5W30QUARTZ
, QUARTZINEO
, INEOMC
, MC3
, 35L
。但是,Elasticsearch 是否有针对此的原生解决方案?
解决方案
我很确定您可以使用shingle token filter完成您想要的操作。根据您的映射,我想您需要在内容字段中添加一个看起来像这样的过滤器,以使您的令牌成对索引:
"filter_shingle":{
"type":"shingle",
"max_shingle_size":2,
"min_shingle_size":2,
"output_unigrams":"true"
}
请注意,这也已经是默认配置,我只是为了清楚起见添加了它。
推荐阅读
- google-analytics - 散布不同的事件
- labview - 多通道动态方程计算
- android - missingPluginException(未找到通道上的方法的实现)
- javascript - Javascript/HTML 在浏览器上的值更改之前显示警报
- c++ - 使用 Morris 算法对二叉树进行中序遍历时出现分段错误
- reactjs - 在反应js中显示选定日期的数据
- c++ - 具有特定数组维度的模板类
- wordpress - 通过根目录访问 wp 插件脚本文件
- ios - Flutter:带有约束的灵活项目行
- apache-spark - Pyspark 使用 kafka 读取现有记录