【问题标题】:Maching two words as a single word将两个单词作为一个单词进行加工
【发布时间】:2020-03-02 10:11:29
【问题描述】:

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

用户希望能够搜索MC3(无空格)并获取文档;但是,搜索MC 3(带空格)也应该可以。此外,可能存在内容不包含空格的文档,并且在使用空格进行查询时应该找到。

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

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

【问题讨论】:

  • 你能解决问题吗?

标签: elasticsearch elasticsearch-query elasticsearch-analyzers


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2012-08-20
    • 2021-04-29
    相关资源
    最近更新 更多