【场 景】搜索公司名,查询匹配度高的公司名称。(公司名都为中文)
【分 词 器】ik
【问题描述】
根据公司名称的关键词或者全名,查询匹配的公司。使用ik_max_word搜索公司全名,如华为科技技术有限公司,那把库里带有有限公司这些词的公司都查出来了。按照权重排序后,虽然匹配度较高的在最前边,但是企业名中包含查询关键词的企业权重不一定最高,如搜索“华为技术有限公司”,权重最高的是“华为xx技术有限公司”。短语形的搜索:如“华为技术”,满足权重最高的也是“华为xx技术有限公司”。
用ik_smart分词,测试“华为科技技术有限公司”,结果“华为技术有限公司”排在了很后边,前边权重高的几乎都是只有有限公司的企业。
【理想结果】查询华为科技,匹配度最高的 【华为科技】权重值最高。也就是说搜索的关键词短语全称,如果说 说的全匹配上,权重值就最高。简单点说,就是like形式的搜索结果权重值最高。
【问 题】
1、如何实现上述描述的搜索结果?包含搜索关键词的企业权重最高。
2、企业名中都点有【公司】、【有限公司】、【集团】之类的比较范的关键词,这部分查询如何做过滤?
2、针对分词如何设置权重?
3、中文分词器好用的或者常用的有哪些?
【分 词 器】ik
【问题描述】
根据公司名称的关键词或者全名,查询匹配的公司。使用ik_max_word搜索公司全名,如华为科技技术有限公司,那把库里带有有限公司这些词的公司都查出来了。按照权重排序后,虽然匹配度较高的在最前边,但是企业名中包含查询关键词的企业权重不一定最高,如搜索“华为技术有限公司”,权重最高的是“华为xx技术有限公司”。短语形的搜索:如“华为技术”,满足权重最高的也是“华为xx技术有限公司”。
用ik_smart分词,测试“华为科技技术有限公司”,结果“华为技术有限公司”排在了很后边,前边权重高的几乎都是只有有限公司的企业。
【理想结果】查询华为科技,匹配度最高的 【华为科技】权重值最高。也就是说搜索的关键词短语全称,如果说 说的全匹配上,权重值就最高。简单点说,就是like形式的搜索结果权重值最高。
【问 题】
1、如何实现上述描述的搜索结果?包含搜索关键词的企业权重最高。
2、企业名中都点有【公司】、【有限公司】、【集团】之类的比较范的关键词,这部分查询如何做过滤?
2、针对分词如何设置权重?
3、中文分词器好用的或者常用的有哪些?
4 个回复
kennywu76 - Wood
赞同来自: laoyang360 、juin 、F91
公司名称可以索引为multi-filed,即一个为keyword类型,一个为text类型。 查询的时候,使用bool Query,对两个字段分别查询后用should连接, 这样完全匹配的公司名称相关度比部分匹配的高,排在前面优先返回。
例如:
对于常用词的滤除,一个可以考虑在分词器中,将常用词定义为stop word, 从而在分词阶段就滤除掉。 另外也可以通过boosting Query,降低这类词的打分权重。 参考: not-quite-not.html
rochy - rochy_he
赞同来自: kennywu76
disMaxQuery 中使用 matchPhraseQuery 与 matchQuery 来结合;设置 tie_breaker 来调节两个查询语句的得分占比
对于 有限公司 是不需要过滤的,不过你可以通过设置 cutoff_frequency 来过滤出现频率很高的一切词语
分词器使用 ik 即可
liujia
赞同来自: kennywu76
http://ohmycat.me/elasticsearc ... .html
sylvanas
赞同来自: