【发布时间】:2019-04-13 18:47:38
【问题描述】:
假设 Edge NGram Tokenizer 有以下映射:
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete_analyzer": {
"tokenizer": "autocomplete_tokenizer",
"filter": [
"standard"
]
},
"autocomplete_search": {
"tokenizer": "whitespace"
}
},
"tokenizer": {
"autocomplete_tokenizer": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter",
"symbol"
]
}
}
}
},
"mappings": {
"tag": {
"properties": {
"id": {
"type": "long"
},
"name": {
"type": "text",
"analyzer": "autocomplete_analyzer",
"search_analyzer": "autocomplete_search"
}
}
}
}
}
并索引了以下文档:
POST /tag/tag/_bulk
{"index":{}}
{"name" : "HITS FIND SOME"}
{"index":{}}
{"name" : "TRENDING HI"}
{"index":{}}
{"name" : "HITS OTHER"}
然后搜索
{
"query": {
"match": {
"name": {
"query": "HI"
}
}
}
}
产生的所有分数都相同,或者TRENDING - HI 的分数高于其他分数。
如何配置,以更高的分数显示实际上以搜索者 n-gram 开头的条目?在这种情况下,HITS FIND SOME 和HITS OTHER 的得分要高于TRENDING HI;同时TRENDING HI 应该在结果中。
还使用了荧光笔,所以给定的解决方案不应该搞砸。
查询中使用的荧光笔是:
"highlight": {
"pre_tags": [
"<"
],
"post_tags": [
">"
],
"fields": {
"name": {}
}
}
将它与match_phrase_prefix 一起使用会打乱突出显示,在仅搜索H 时产生<H><I><T><S> FIND SOME。
【问题讨论】:
标签: elasticsearch search n-gram