【发布时间】:2015-05-05 21:16:53
【问题描述】:
我正在使用 Elasticsearch 和 EdgeNGram 过滤器,该过滤器设置如下:
"edgeNGram": {
"type": "edgeNGram",
"min_gram": 3,
"max_gram": 15,
},
问题是当我使用非常短的单词进行查询时,它们会完全从搜索中省略。假设我输入“Vitamin C” -> 这只会给我第一个词“Vitamin”的结果。有什么方法可以告诉 Elasticsearch 在索引最多 3 个字符的单词时不要使用 EdgeNGram 过滤器?
谢谢。
编辑:
这些是我的设置:
ELASTICSEARCH_INDEX_SETTINGS = {
"settings": {
"analysis": {
"analyzer": {
"sk_hunspell": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"sk_lowercase", "sk_SK", "stopwords_SK",
"edgeNGram", "asciifolding",
"remove_duplicities",
]
},
},
"filter": {
"sk_SK": {
"type": "hunspell",
"locale": "sk_SK",
"dedup": True,
"recursion_level": 0,
"ignore_case": True,
},
"sk_lowercase": {
"type": "lowercase",
},
"stopwords_SK": {
"type": "stop",
"stopwords": STOPWORDS_SK,
},
"remove_duplicities": {
"type": "unique",
"only_on_same_position": True
},
"edgeNGram": {
"type": "edgeNGram",
"min_gram": 3,
"max_gram": 15,
"token_chars": ["letter", "digit"],
},
},
}
}
}
我在数据库中存储有关维生素、矿物质和药用植物的信息。 (它们的使用、收集、开花、健康益处等)这些信息是用斯洛伐克语写的。 (植物和矿物的名称也以捷克语和拉丁语存储)。
【问题讨论】:
-
不,不可能根据搜索词大小切换过滤器。但是,您可以将“Vitamin C”视为一个单词 - 即不要将空格视为分隔符。您能否添加有关您的数据以及您如何进行搜索的更多信息? EdgeNGram 可能不适合您的用例?
-
我已经更新了我的帖子,感谢您的建议。
标签: search elasticsearch search-engine