将两个单词作为一个单词

Maching two words as a single word

假设我有一个文档,其中包含一个包含以下内容的字段:5W30 QUARTZ INEO MC 3 5L

用户希望能够搜索MC3(没有space)并获取文档;但是,搜索 MC 3(使用 spaces)也应该有效。此外,可以有内容没有 spaces 的文档,并且应该在使用 space.

查询时找到。

我尝试在没有 spaces 的情况下进行索引(例如 5W30QUARTZINEOMC35L),但这并不能真正起作用,因为使用通配符搜索我会匹配太多,例如MC35 也会匹配,我只想匹配两个连接在一起的精确单词(以及精确的单个单词)。

到目前为止,我正在考虑另外索引两个词的所有组合,例如5W30QUARTZQUARTZINEOINEOMCMC335L。但是,Elasticsearch 是否有针对此的原生解决方案?

我很确定您想要的可以用 shingle token filter 完成。根据您的映射,我想您需要在您的内容字段中添加一个看起来像这样的过滤器,以使您的令牌成对索引:

"filter_shingle":{
   "type":"shingle",
   "max_shingle_size":2,
   "min_shingle_size":2,
   "output_unigrams":"true"
}

请注意,这也已经是默认配置,我只是为了清楚起见才添加它。