开发者社区> 问答> 正文

solr查询权重的问题,qf设置无效:报错

小弟在使用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只能为两个字的,蛋疼!!!!!




展开
收起
kun坤 2020-06-05 23:27:59 493 0
1 条回答
写回答
取消 提交回答
  • 首先,copyField并不是作为一个字段的引用的存在,而是在索引的时候会真的建立一个这样的字段,叫做all,所以查询all的时候并不会解析成查询copyField的source字段,另外edismax查询的qf字段只有在q没有指定字段的时候才会起作用,就是作为一个默认查询,比如这样  q=计算机&qf=title^10 summary^2 就会将q扩展到title和summary这两个字段去查询,并且赋予权重。关于分词的问题的话,mmseg4j不清楚,ik的智能分词其实是做了一个去歧义处理,默认只匹配词典中最长的词,也就是词典中存在了“计算机网络”这个词语,而“计算机”和“网络”都在这个词里面,所有会认为这个是一个歧义,分成一个词了,至于你想要的那种效果,可以通过改IK的源码实现,我改过,但是其实效果并不是那么好,会出现很多词分不出的情况。

    2020-06-05 23:28:07
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Phoenix 全局索引原理与实践 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载