使用ik_max_word模式对下面关键词进行分词:
分词结果是我想要的:`葡萄糖, 葡萄,糖酸,钙,乳酸钙...`。但我以query_string query使用关键词`葡萄糖`并且是`default_operator=and`的情况下,查询不到任何结果:
然后我将模式改为`default_operator=or`,再explian的情况下:
会查询到结果(这是当然的),但explain分析中明显的看到`葡萄糖`是算命中并且根据其打分的:
[/code]
所以我就很茫然,为啥在`default_operator=and`的情况下,`葡萄糖`无法命中。
另外,`葡萄`、`糖酸`、`葡萄糖酸`都可以命中。。。
-------分割线-------
目前我的想法是,当我去测试“`葡萄糖`”的分词时,分词结果为“葡萄糖”,“葡萄”,“糖”。 那是不是在以`default_operator=and`搜索时,必须满足这三个关键词,才算是命中啊。
因为上面"葡萄糖酸钙乳酸钙口服液"的分词结果中并不包含“糖”。
这是我的猜测,是否有人知道我的猜测是否正确?如果真的是这样的话,那有该怎么处理呢?
{
"analyzer" : "ik_max_word",
"text" : "葡萄糖酸钙乳酸钙口服液"
}
分词结果是我想要的:`葡萄糖, 葡萄,糖酸,钙,乳酸钙...`。但我以query_string query使用关键词`葡萄糖`并且是`default_operator=and`的情况下,查询不到任何结果:
{
"query": {
"query_string": {
"query": "葡萄糖",
"type": "cross_fields",
"default_operator": "and"
}
}
}
查询结果:"hits": {
"total": 0,
"max_score": null,
"hits":
}
然后我将模式改为`default_operator=or`,再explian的情况下:
{
"query": {
"query_string": {
"query": "葡萄糖",
"default_operator": "or"
}
}
,"explain":true
}
会查询到结果(这是当然的),但explain分析中明显的看到`葡萄糖`是算命中并且根据其打分的:
{
"value": 1.7260926,
"description": "weight(search_product:葡萄糖 in 0) [PerFieldSimilarity], result of:",
"details": [
{
"value": 1.7260926,
"description": "score(doc=0,freq=1.0 = termFreq=1.0\n), product of:",
"details": [
{
........
[/code]
所以我就很茫然,为啥在`default_operator=and`的情况下,`葡萄糖`无法命中。
另外,`葡萄`、`糖酸`、`葡萄糖酸`都可以命中。。。
-------分割线-------
目前我的想法是,当我去测试“`葡萄糖`”的分词时,分词结果为“葡萄糖”,“葡萄”,“糖”。 那是不是在以`default_operator=and`搜索时,必须满足这三个关键词,才算是命中啊。
因为上面"葡萄糖酸钙乳酸钙口服液"的分词结果中并不包含“糖”。
这是我的猜测,是否有人知道我的猜测是否正确?如果真的是这样的话,那有该怎么处理呢?
1 个回复
medcl - 今晚打老虎。
赞同来自: liubin 、taku