lucene - 在 ElasticSearch 中匹配缺失的空格

标签 lucene elasticsearch

我有一些文档要在 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/

相关文章:

java - PyLucene org.apache.lucene.benchmark 丢失

java - Solr Custom Similarity - 使用索引文档中的字段

performance - 使用过滤器,查询或两者结合来优化Elasticsearch查询

elasticsearch - 不同类型的Elasticsearch 7.6 “illegal_argument_exception”映射器[processes.pid],current_type [text],merged_type [long]

elasticsearch - Elasticsearch “word”数据类型:映射不正确

java - 如何使用多短语查询?

java - lucene 忽略对默认字段以外的字段的查询

solr - 从 DocsAndPositionsEnum 检索所有术语位置

azure - 使用其 REST API 将 Azure DevOps 指标获取到 Elasticsearch 数据库中?

elasticsearch - Elasticsearch 未给出结果