我的情景是这样的:
用户需要我使用pinyin进行一个全文检索,我在使用pinyin分词器后,发现了一个问题...
比如我要查询xinbeishi(新北市),那么返回的结果中,可能错误的包含诸如“新华路北区联合超市”这种奇怪的数据。
我可以理解这是因为该数据中分别包含了xin、bei和shi的拼音,因此在切词匹配倒排时,把该值也错误的匹配了出来。
在查询的时候不切词也是不行的,因为用户的需求,需要liudehua和dehua liu都能查到“刘德华”,所以查询时必须切词。
我想请教各位前辈,有没有什么查询方法,可以限制不同匹配值之间的距离,以此来避免当不同字相距过远也返回的情况?
或者有没有其他方法可以解决我的问题呢?
描述的可能不是很清楚,希望各位能够解答,同时祝大家身体健康、工作顺利~
用户需要我使用pinyin进行一个全文检索,我在使用pinyin分词器后,发现了一个问题...
比如我要查询xinbeishi(新北市),那么返回的结果中,可能错误的包含诸如“新华路北区联合超市”这种奇怪的数据。
我可以理解这是因为该数据中分别包含了xin、bei和shi的拼音,因此在切词匹配倒排时,把该值也错误的匹配了出来。
在查询的时候不切词也是不行的,因为用户的需求,需要liudehua和dehua liu都能查到“刘德华”,所以查询时必须切词。
我想请教各位前辈,有没有什么查询方法,可以限制不同匹配值之间的距离,以此来避免当不同字相距过远也返回的情况?
或者有没有其他方法可以解决我的问题呢?
描述的可能不是很清楚,希望各位能够解答,同时祝大家身体健康、工作顺利~
2 个回复
Ombres
赞同来自: yeziblo
最大间隔距离是slop参数,但是只有match_phrase 或者7.x版本的span查询支持slop吧。
简单介绍一下
match_phrase是把查询的词先分词成一个或者多个term,然后按照slop(默认是0,也就是多个term必须紧邻)确定多个term之间的最大移动距离来返回结果.
如果 刘德华 被拆成 liu de hua 三个term,使用match_phrase查询 德华刘,slop为0时可以不会返回结果,但是slop为2时能查到刘德华这条记录
fantuan
赞同来自: yeziblo
提供一个思路。搞一个keep_joined_full_pinyin为true的自定义拼音分词器,不切词,只保留全拼音,例如新北市-> xinbeishi, 搞一个字段用这个分词器解析。第一次用prefix查询这个字段,只召回新北市。如果没有召回,再查询默认pinyin分析其解析的字段。这样也能满足liudehua, dehua liu都召回刘德华的情况。