与ElasticSearch中缺少的空格匹配

Dav*_*fer 6 lucene elasticsearch

我有要在ElasticSearch中编制索引的文档,其中包含一个名为的文本字段name.我目前使用snowball分析器索引名称.但是,我想匹配包含和不包含空格的名称.例如,名为"The Home Depot"的文档应与"homedepot","home"和"home depot"匹配.此外,具有单个单词名称的文档(如"ExxonMobil")应与"exxon mobil"和"exxonmobil"匹配.

我似乎无法找到正确的分析器/过滤器组合来实现这一目标.

fem*_*gon 5

我认为解决这个问题的最直接方法是应用一个Shingle令牌过滤器,它不会创建ngrams字符,而是创建传入令牌的组合.您可以将它添加到您的分析器,如:

filter:
    ........
    my_shingle_filter:
        type: shingle
        min_shingle_size: 2
        max_shingle_size: 3
        output_unigrams: true
        token_separator: ""
Run Code Online (Sandbox Code Playgroud)

您应该注意过滤器链中放置此过滤器的位置.在所有令牌分离/删除/替换已经发生之后(即在任何StopFilters,SynonymFilters,词干分析器等之后),它可能应该在链中迟到.