es配置同义词时,只对分词后最小粒度的词有效,对于组合词,加在ik的扩展词表里起不了作用怎么办?
Elasticsearch | 作者 tygcs | 发布于2018年11月22日 | 阅读数:4331
例如:
“营业厅”分词结果为“营业”、“厅”
“礼包”分词结果为“礼包”
配置同义词表:“礼包, 营业厅”
加入了同义词后,使用的ik_max_word分词,ik中配置了扩展词“营业厅”,分词结果如下:
在这种情况下,搜"营业厅",得到的是“营业厅”+“礼包”的结果
搜“礼包”,只有“营业厅”的结果
觉得很奇怪,营业厅已经加在ik的扩展词表里了,猜想可能是因为同义词是配置在index里面的,而处理同义词时可能还没有用到ik的扩展词表?
然后测试同义词表改为“礼包,营业”,就都能搜到了。
因此我推测同义词表可能只能处理最细粒度的词,而对于营业厅这种由两个词组合成的词,应该怎么办呢?
es自己可以配置扩展词表吗?可不可以不用ik分词器来配,而用es配置扩展词表呢?
或者怎么配置才能够使得上面的分词结果变为:
礼包->礼包,营业厅
营业厅->礼包,营业厅
而没有”营业“、”厅“这些
“营业厅”分词结果为“营业”、“厅”
“礼包”分词结果为“礼包”
配置同义词表:“礼包, 营业厅”
加入了同义词后,使用的ik_max_word分词,ik中配置了扩展词“营业厅”,分词结果如下:
礼包:
{
"tokens" : [
{
"token" : "营业厅",
"start_offset" : 0,
"end_offset" : 2,
"type" : "SYNONYM",
"position" : 0
},
{
"token" : "礼包",
"start_offset" : 0,
"end_offset" : 2,
"type" : "SYNONYM",
"position" : 0
},
{
"token" : "营业",
"start_offset" : 0,
"end_offset" : 2,
"type" : "SYNONYM",
"position" : 1
},
{
"token" : "厅",
"start_offset" : 0,
"end_offset" : 2,
"type" : "SYNONYM",
"position" : 2
}
]
}
营业厅:
{
"tokens" : [
{
"token" : "营业厅",
"start_offset" : 0,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 0
},
{
"token" : "礼包",
"start_offset" : 0,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 0
},
{
"token" : "营业",
"start_offset" : 0,
"end_offset" : 2,
"type" : "SYNONYM",
"position" : 1
},
{
"token" : "厅",
"start_offset" : 2,
"end_offset" : 3,
"type" : "SYNONYM",
"position" : 2
}
]
}
在这种情况下,搜"营业厅",得到的是“营业厅”+“礼包”的结果
搜“礼包”,只有“营业厅”的结果
觉得很奇怪,营业厅已经加在ik的扩展词表里了,猜想可能是因为同义词是配置在index里面的,而处理同义词时可能还没有用到ik的扩展词表?
然后测试同义词表改为“礼包,营业”,就都能搜到了。
因此我推测同义词表可能只能处理最细粒度的词,而对于营业厅这种由两个词组合成的词,应该怎么办呢?
es自己可以配置扩展词表吗?可不可以不用ik分词器来配,而用es配置扩展词表呢?
或者怎么配置才能够使得上面的分词结果变为:
礼包->礼包,营业厅
营业厅->礼包,营业厅
而没有”营业“、”厅“这些
1 个回复
rochy - rochy_he
赞同来自: zz_hello