使用netstat -lntp来看看有侦听在网络某端口的进程。当然,也可以使用 lsof。

使用ik分词,明明分词正确,在查询时无法命中

Elasticsearch | 作者 sishuidliunian | 发布于2019年03月06日 | 阅读数:4243

使用ik_max_word模式对下面关键词进行分词:
{
"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`搜索时,必须满足这三个关键词,才算是命中啊。
 
因为上面"葡萄糖酸钙乳酸钙口服液"的分词结果中并不包含“糖”。
 
这是我的猜测,是否有人知道我的猜测是否正确?如果真的是这样的话,那有该怎么处理呢?
已邀请:

medcl - 今晚打老虎。

赞同来自: liubin taku

看分词结果,ik_max_word 对词语 葡萄糖 分词的结果是:葡萄糖葡萄,如果是 AND 操作,那么这些词都要满足。如果是 OR,那么满足任意即可。这就是为什么 AND 找不出来的原因。

要回复问题请先登录注册