三人行必有我师

ik_max_word分词某些情况下不够细,例如“大牛”搜不到“大黑牛”,该如何处理?

Elasticsearch | 作者 tygcs | 发布于2018年11月12日 | 阅读数:4831

例如,对于“大黑牛”,分词如下:
{
"tokens" : [
{
"token" : "大",
"start_offset" : 0,
"end_offset" : 1,
"type" : "CN_CHAR",
"position" : 0
},
{
"token" : "黑",
"start_offset" : 1,
"end_offset" : 2,
"type" : "CN_CHAR",
"position" : 1
},
{
"token" : "牛",
"start_offset" : 2,
"end_offset" : 3,
"type" : "CN_CHAR",
"position" : 2
}
]
}

但是,用户实际上搜索的是“大牛”,分词如下:
 
{
"tokens" : [
{
"token" : "大牛",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
}
]
}

因此,搜索“大牛”找不到“大黑牛”的结果。
简单的想法是把分词改为单字分词,自带的standard分词器就是这种效果,但是那样也失去了分词的意义。
如何尽量保证分成了所有的分词可能呢?能不能在ik_max_word基础上做一些改进呢?
 
或者简单的说,该如何处理搜索“大牛”找不到“大黑牛”这种情况呢?
 
谢谢。
 
 
 
 
 
 
已邀请:

rochy - rochy_he

赞同来自: tygcs

添加一个附加字段,分词模式设置为基础分词器即可
搜索的时候,结合(dis_max_query)原字段和附加字符的搜索结果即可

要回复问题请先登录注册