我正在使用带有EdgeNGram过滤器的Elasticsearch,其设置如下:
"edgeNGram": {
"type": "edgeNGram",
"min_gram": 3,
"max_gram": 15,
},
问题在于,当我使用非常短的单词进行查询时,它们在搜索中被完全省略。假设我输入“维生素C” - >这给了我第一个词“维生素”的结果。有什么方法可以告诉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"],
},
},
}
}
}
在数据库中,我存储有关维生素,矿物质和药用植物的信息。 (他们的使用,收集,开花,健康益处等)信息以斯洛伐克语撰写。 (植物和矿物的名称也以捷克语和拉丁语存储)。
答案 0 :(得分:0)
这个想法可能是一个黑客,但你可以用一个特殊的字符填充小于3的单词,然后将它们插入到索引中,这样它们就是长度为3.
当您接受用户的查询时,您还必须使用相同的特殊字符填充少于三个的单词。
您需要为此创建自定义标记生成器。