最近,我遇到了一个使用elasticsearch的非常奇怪和令人沮丧的问题。我使用NEST API索引了大约100万个文档。索引包含一个全文字段,如下所示:
{"title": {"include_in_all": false, "analyzer": "ik_max_word", "type": "string"}}
该领域的数据主要是中文,ik_max_word是一个中国分析仪,具有最好的颗粒。问题是:
1)通常我在该字段上使用匹配短语查询,当我查询类似" ABC" (我在这里替换中文字符),我只得到260个结果。搜索查询很受欢迎:
"match": {
"title": {
"type": "phrase",
"query": "非公开",
"analyzer": "ik_max_word"
}
}
2)如果我使用" ABC"的术语查询,我得到20000+结果。
3)此外,如果我查询" ABCDE"使用匹配短语,我得到了4000个结果。
我在这里很困惑。该字段是一个分析字段,我认为如果我可以使用术语查询获得20000+结果,那么分析器可以很好地分离字符并将它们放入倒排索引中。我知道匹配词组查询在位置信息的帮助下结合了术语,所以我认为我应该在这里得到至少20000个结果而不是260个。
感谢您提供任何帮助!
elasticsearch.yml中ik的配置是:
index:
analysis:
analyzer:
ik:
alias: [ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider
ik_max_word:
type: ik
use_smart: false
ik_smart:
type: ik
use_smart: true
index.analysis.analyzer.default.type : "ik"