赞
踩
在ES中进行部分关键词搜索时,搜索无结果,如搜索 【IT】
这里使用的是 analysis-ik
POST test_index/_analyze
{
"text":"IT Manager",
"analyzer": "ik_max_word"
}
分词结果,分词结果中不包含IT
{
"tokens": [
{
"token": "manager",
"start_offset": 3,
"end_offset": 10,
"type": "ENGLISH",
"position": 0
}
]
}
根据项目:lucene
我们可以看到在 cjk(中文、日文和韩文)目录下的停用词中,包含了该停用词,从而导致索引中不会包含该停用词。
项目:https://github.com/infinilabs/analysis-ik 中的停用词,extra_stopword.dic
在实践过程中,我们通过自定义stopword的方式(如下定义),无法解决该问题
{ "settings": { "analysis": { "filter": { "chinese_stop": { "type": "stop", "stopwords": [] } }, "analyzer": { "ik_max_word_custom": { "type": "custom", "tokenizer": "ik_max_word", "filter": ["chinese_stop"] } } } } }
方案一:
在配置文件中移除相应的停用词
该方式效果如下:
分词请求:
POST test_index/_analyze
{
"text":"IT Manager",
"analyzer": "ik_max_word"
}
分词结果:
{ "tokens": [ { "token": "it", "start_offset": 0, "end_offset": 2, "type": "ENGLISH", "position": 0 }, { "token": "manager", "start_offset": 3, "end_offset": 10, "type": "ENGLISH", "position": 1 } ] }
方案二:
我们可以将对应的字段使用standard分词器存储到另一个字段,如 field.en ,在匹配的时候,两个字段同时进行匹配即可
值得注意的是,这里我们不能去使用english的分词器,一个是因为 english 中也会过滤掉一些停用词,如这里的【IT】,另外其还会自动索引为词根。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。