【发布时间】:2020-03-04 09:51:29
【问题描述】:
我的问题
我搜索单词form,但精确匹配的单词form 不是结果中的第一个。有没有办法解决这个问题?
我的搜索查询
{
"query": {
"match": {
"word": "form"
}
}
}
结果
word score
--------------------------
formulation 10.864353
formaldehyde 10.864353
formless 10.864353
formal 10.84412
formerly 10.84412
forma 10.84412
formation 10.574185
formula 10.574185
formulate 10.574185
format 10.574185
formally 10.574185
form 10.254687
former 10.254687
formidable 10.254687
formality 10.254687
formative 10.254687
ill-formed 10.054999
in form 10.035862
pro forma 9.492243
POST my_index/_analyze
搜索中的单词form只有一个标记form。
在索引中,form 标记为 ["f", "fo", "for", "form"]; formulation 标记是 ["f", "fo", ..., "formulatio", "formulation"]。
我的配置
过滤器
"edgengram_filter": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 20
}
分析仪
"analyzer": {
"abc_vocab_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"keyword_repeat",
"lowercase",
"asciifolding",
"edgengram_filter",
"unique"
]
},
"abc_vocab_search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"keyword_repeat",
"lowercase",
"asciifolding",
"unique"
]
}
}
映射
"word": {
"type": "text",
"analyzer": "abc_vocab_analyzer",
"search_analyzer": "abc_vocab_search_analyzer"
}
【问题讨论】:
-
我在下面提供了一个答案,但我很好奇为什么你的
min-gram和max-gram有如此巨大的差异。如果您可以提供有关您的用例的更多信息,这将很有帮助,因为我认为不需要将min-gram设置为 1 或 2,这只会消耗巨大的空间而不会提供任何优势。 max-ngram 设置为 20 也是如此。也许它取决于您的域,但如果您决定将 min 和 max ngram 设置得那么高,请对您的索引大小进行彻底分析。 -
标签: elasticsearch elasticsearch-5 elasticsearch-dsl elasticsearch-6