小弟在使用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只能为两个字的,蛋疼!!!!!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Apache Solr进行全文搜索时,通过copyField
指令将多个字段的内容复制到一个统一的字段(如all
)中,以便进行统一的全文检索,这是一种常见的做法。当你遇到查询结果需要根据原字段分配权重的问题时,这通常涉及到Solr的查询解析、评分机制以及Schema配置。
你的查询语句是 q=all:计算机
,这意味着你直接在all
这个字段上进行搜索。Solr会基于all
字段中的内容对文档进行匹配和评分,但默认情况下,它不会考虑原始字段对评分的影响,因为查询是在合并后的all
字段上执行的。
使用DisMax或eDisMax查询解析器:
qf
参数)。例如,你可以这样配置查询:
q={!edismax qf="field1^2 field2^1.5 all"}计算机
这样,当查询词“计算机”出现在field1
中时,其相关性得分将是出现在field2
中的两倍,而所有字段的贡献则按照各自设定的权重计算。
调整Schema中的字段权重:
boost
属性),这会影响文档的整体评分。不过,这种方法不如在查询时动态调整权重灵活。多字段查询:
q=field1:计算机 field2:计算机
然后,你可以在应用层根据来自不同字段的命中情况手动调整结果排序。
自定义相似度模型: