问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ES中文分词器之精确短语匹配(解决了match_phrase匹配不全的问题)

发布网友 发布时间:2022-10-11 17:01

我来回答

1个回答

热心网友 时间:2023-10-14 02:00

调研了几种分词器,例如IK分词器,ansj分词器,mmseg分词器,发现IK的分词效果最好。举个例子:

在上述例子中,IK和Mmsg 用的同一套词典。Ansj和IK,Mmsg使用的不是一套词典,也没有配置停词。

本文讲的中文分词器就是IK分词器。

楼主意淫着将所有的单字放入词典中,这样用ik_max_word 对数据建索引时既可以把词分出来建索引,又可以把字分出来建索引。然后用 ik_smart 将查找短语,因为ik_smart分出的数据是 ik_max_word 的一个子集,如果要查找的短语在原文中有出现,那么一定可以查到。后来发现用ik_smart分词器查找句子(match_phrase)时一个都没有查到,exo???为什么会查不到呢?明明是一个子集。对此官方网站对match_phrase的解释如下:

意思就是说用match_phrase查找时,查找分词器分出的词的位置和要建索引时分出的词的位置一样。举个例子:

从上面可以看出,查找时ik_smart将语句分为了快乐和感恩两个词,位置分别为1和2,而ik_max_word建索引时,快乐和感恩的位置分别是1和4,在match_phrase看来,这种是不匹配的,所以用ik_smart分词短语时无法查到或者查全数据。

好吧,既然ik_smart无法查到,我用ik_max_word查找总行了吧。用上述的例子,查找”快乐“时,你会发现你用ik_max_word查找到的结果没有standard分词器建索引查找获取到的结果多。原因和上述讲的一样:

在构建索引的时候,快乐,快和乐的位置分别是1,2,4,而查找时分词的顺序是1,2,3,然后match_phrase认为其不匹配,因此查询不到这种结果。

遇到问题了,在网上寻求解决方案。看了几篇博客,都指出了match_phrase的这个匹配问题,解决方案有以下两种:

standard分词器大家都比较熟,针对于汉字就是一个一个分,这种肯定是可以查全的。但一个一个字分的话,每个字对应的文档集合非常多,如果数据量达到了百亿,在求交集,计算距离时,效果非常差。

Ngram分词器类似于standard分词器,他可以指定分词的长度,然后用standard的方法切割。比如说“节日快乐”,我们指定切割的长度为2,NGram会切成“节日”,“日快”,“快乐”。虽然查找时可以减少每个token对应的文档数,但是存储量会增大很多,而且不在支持模糊的match匹配。很土。

ik_max_word构建索引,ik_smart无法查找,原因是ik_max_word分出了所有的词,ik_smart只分出了一种词,由于match_phrase本身的*导致ik_smart查找不到。那我构建的时候采用ik_smart,查找的时候也用ik_smart,这样只要原文中有数据,构建和查找用同一种分词方法,就应该可以查找得到。测试后发现,这种也有很大的问题,即像“潜行者”这样的词,只分为了“潜行”和“者”两个token,但是“行者”也是一个词,在查找“行者”时无法查全数据。

ik_smart无法查全的原因是只分出了一种词的可能性,导致有些词查询不全。ik_max_word能解决这个问题。。但是ik_max_word的问题是如果查找的最后一个字能和原文中这个字的下一个字组成词语,那么就会出现无法查全的问题。我们能不能让ik_max_word将词和字分开?

当然可以,对一个属性指定两种分词方法:

这样ulluin属性采用standard分词,即单字分词,ulluin.ik采用ik_max_word即按词分词,ik_max_word的词典中去除所有的单字

查询时先将查询短语分词,如果第一个token和最后一个token中存在一个字,那么这个字可能与原文中的下一个字或者上一个字组成词,导致ik_max_word无法查到,这时我们用standard分词器在ulluin中查询,如果第一个token和最后一个token都是词,那么说明可以在ik_max_word中查询。来吧,测试一下:

为什么还是有问题?????ik_max_word查出的数据量比standard的少???还是因为match_phrase的*,索引中“节日”和“快乐”的位置是1和3,而查找时“节日”和“快乐”的位置是1和2。这个问题很好解决,用match_phrase_prefix查询即可,即:

上面还提到ik_max_word有一个问题是分出的词语比standard的多,我们过滤了单字分词后,这个效果就会有很大的提升。假设我们的词典没有四字分词,只有二三字。比如说

可以看出,修改后的效果要比standard的效果好的多,不但token数变少了,而且每个token对应的文档数也大大的降低,减少了求交集的数据量和计算距离的数据量。

至此总算解决了ES中文分词切精确匹配的问题。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
瑞安市塘下航达汽车电器配件厂怎么样? 意尔康公司总部地址在哪里 I only wish to face the sea, with spring blossoms是什么意思 征信五级分类是什么?被纳入黑名单有什么影响? 你好,如果诈骗分子利用你隐私视频和盗取你的通讯录好友威胁你要钱的话... ...对方有我的私密照片还有通讯录,要求我给他五千,要不然就发我家人,我... ...现在已经一个月没有性生活了。但是她平时对我很好 是怎么了?_百度... 女人半年没有性生活正常吗 谁能用英语给我写一段游戏里面的征婚启事? 征婚启事用英文怎么说? ES中的分词器 ES自定义分词器 汽车开空调时冷时不冷怎么回事? 如果被封了,账号里的钱怎么拿回来? 保时捷911混动版最新谍照 最快将于年内亮相 保时捷卡宴2021油电混合认可度 食疗与食补书籍 绍兴市到苏州灵山大佛寺要多少路程 黄埭到灵山大佛路线 灵山大佛到苏州虎丘多少公里 如何抢购华为mate40pro+ 小学六年级下册语文第四单元测试卷 小学六年级上册语文第四单元测试题 小学六年级语文下册第四单元测试试题 桌子上摆放的写有信息和照片的叫什么 比较亲民的酱香型白酒有哪些? 事业单位办公人员台面上放的透明工作证架叫什么 制作动漫的软件 高地人复仇之旅的背景介绍 导游生活小知识 ES - 修改分词器及定制分词器 如何做豆腐萝卜丝汤 豆腐萝卜丝汤的做法 拐卖妇女儿童罪最高判几年? 拐卖妇女儿童罪判多少年 游戏王美版和日版哪个价值高? 游戏王中三幻神的卡,英美、日文、欧版哪种版本收藏度比较高? 有关游戏王的两个问题(真人版) NDS的游戏王卡带美版比日版大约都便宜多少? 博学宏才成语解释 苹果电脑Mac咋下魔兽争霸? iphone8能下vs吗? 学识广博,有多方面的才能??是什么成语 在淘宝上买了香港代购的大嘴猴套装,500多是正品吗 宏森成语是什么意思? 豆腐萝卜丝汤的家常做法大全怎么做好吃视 中国古代有什么什么博学四字成语 留在风中的记忆作文 初一作文 留在风中的记忆作文800 在风中的日子初中作文 风中的记忆 是作文800字左右的