小弟在使用solr做应用的时候,需要根据字段来对查询结果进行权重分配。但是遇到一个比较奇怪的问题。如下:
首先,我有30个字段,然后一个copyField为all,其它字段全部指向all。查询的时候语句为:
q=all:计算机&qf=tags^31 title^10 summary^8&defType=edismax,但是无论我怎么样去调整df里面的评分,都无效。但是如果在在查询的时候带权重就有效,如:q=title:(计算机)^31 title:(计算机)^10 summay:(计算机)^8这样查询出来的结果就是按我给的分类来排序的。让我很是郁闷,我想应该是哪里配置有问题,请哪位比较熟悉的同学告知下!项目急待解决这个问题!!!!
PS:还遇到一个问题,就是如 计算机网络与XX,会给分词为 计算机网络 XX 与 ,而不会再将计算机网络 拆分为 计算机 网络 ,无论是使用 ik还是mmseg4j。如果使用IK的非智能,可以分出来,但是还会分出非常多单字,这感觉郁闷。。目前使用的是mmseg4j,他的max-word只能为两个字的,蛋疼!!!!!
首先,copyField并不是作为一个字段的引用的存在,而是在索引的时候会真的建立一个这样的字段,叫做all,所以查询all的时候并不会解析成查询copyField的source字段,另外edismax查询的qf字段只有在q没有指定字段的时候才会起作用,就是作为一个默认查询,比如这样 q=计算机&qf=title^10 summary^2 就会将q扩展到title和summary这两个字段去查询,并且赋予权重。关于分词的问题的话,mmseg4j不清楚,ik的智能分词其实是做了一个去歧义处理,默认只匹配词典中最长的词,也就是词典中存在了“计算机网络”这个词语,而“计算机”和“网络”都在这个词里面,所有会认为这个是一个歧义,分成一个词了,至于你想要的那种效果,可以通过改IK的源码实现,我改过,但是其实效果并不是那么好,会出现很多词分不出的情况。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。