我需要在solr集合中实现跨多个字段的搜索。我看到了一个解决方案,其中引入了新的字段收集器,其中包括整个集合中所有字段的内容,但是如果我需要根据哪个字段命中来计算分数,该怎么办。例如,“姓名”字段对我来说比“电子邮件”字段重要两倍。在Solr有可能吗?
flmtquvp1#
edismax (and the older dismax) query handler支持为不同字段中的命中赋予不同的权重。您可以使用参数qf提供要搜索的字段列表,并通过field^<weight>语法给予它们的相对权重:
qf
field^<weight>
q=foo&qf=name^2 email
..将在name和email中查询foo,其中name的权重为两倍高。您可以将其与catch-all字段(将所有字段的内容复制到要查询的公共字段中的copyField指令)结合使用,其中您可以将特定字段中的命中率高于catch-all字段中的命中率(此处命名为_text_,因为这是默认的):
name
email
foo
_text_
q=foo&qf=name^4 email^2 _text_
1条答案
按热度按时间flmtquvp1#
edismax (and the older dismax) query handler支持为不同字段中的命中赋予不同的权重。您可以使用参数
qf
提供要搜索的字段列表,并通过field^<weight>
语法给予它们的相对权重:..将在
name
和email
中查询foo
,其中name
的权重为两倍高。您可以将其与catch-all字段(将所有字段的内容复制到要查询的公共字段中的copyField指令)结合使用,其中您可以将特定字段中的命中率高于catch-all字段中的命中率(此处命名为
_text_
,因为这是默认的):