在搜索结果中使用ngram过滤器时,我可以优先考虑更精确的匹配吗?

con*_*t47 10 elasticsearch

当使用带有elasticsearch的ngram过滤器时,当我搜索"test"之类的东西时,我返回一个文档"latest","tests"和"test".是否有一种方法可以使"完全匹配查询的文档"测试"总是在搜索结果中返回更高的位置?

Jil*_*urp 6

这对于ngrams来说有点问题:你的排名会得到很多误报.解决方案是将ngrams与带状疱疹相结合.基本上除了ngram之外,您还可以将完整单词索引为单独的术语或甚至是单词的组合.带状疱疹基本上就像是ngrams,但是用文字而不是字符.

这样,与瓦片术语的精确匹配得分高于仅匹配ngrams的东西.

更新.以下是自定义分析器的示例.定义它之后,您可以在映射中使用它.在这种情况下,我使用icu_normalizer和折叠以及我的suggestions_shingle.所有这些都被设置为默认分析器,所以我的所有字符串都以这种方式处理.

{
    "analyzer":{
        "default":{
            "tokenizer":"icu_tokenizer",
            "filter":"icu_normalizer,icu_folding,suggestions_shingle"
        }
    },
    "filter": {
        "suggestions_shingle": {
            "type": "shingle",
            "min_shingle_size": 2,
            "max_shingle_size": 5
        }
    }
}
Run Code Online (Sandbox Code Playgroud)