当使用带有elasticsearch的ngram过滤器时,当我搜索"test"之类的东西时,我返回一个文档"latest","tests"和"test".是否有一种方法可以使"完全匹配查询的文档"测试"总是在搜索结果中返回更高的位置?
这对于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)
| 归档时间: |
|
| 查看次数: |
3186 次 |
| 最近记录: |