如何使用ElasticSearch搜索复合词?

时间:2016-09-16 10:36:10

标签: elasticsearch n-gram

我一直在使用Elasticsearch,但我似乎无法找到解决此特定问题的分析器: 我有一个包含以下文本的文档:

extension UITextField {

    var count:Int {
        get{
            return emailInput.text?.count ?? 0
        }

    }
}

如果用户键入" harrypotter" (没有空格),我需要能够将该文档显示为搜索结果。可能吗? 我看了Ngram,但它似乎没有修复这个场景因为Ngram,我必须将整个文档存储为:

"The Harry Potter and the Sorcerer Stone is a great book".

如果用户搜索" harry potter stone"这不是我想要的,那么文档也不会出现。

1 个答案:

答案 0 :(得分:0)

您可以在ngram配置中使用“token_chars”:[“letter”,“digit”,“whitespace”]来索引空格,这将与您的查询“harry potter stone”和“harrypotter”匹配

REF: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-ngram-tokenizer.html

编辑: 您还可以在内部字段中索引'ngram'版本,然后查询正常分析字段和ngram字段(包含在bool查询中)