使用Solr 4.0我有以下查询:
(family_name:(Brown) OR maiden_name:(Brown)^0.5) AND (
source:HIGHQUALITY^3000 OR source:SVC1^2000 OR
source:SVC2 OR source:SVC3 OR
source:SVC4 OR source:SVC5)
HIGHQUALITY和SVC1..SVC5不是“source”字段值的真实名称。我们不能完全假设它们是有序的,或者可能是......
我正在寻找的是一个函数,它根据源索引字段的值返回一个提升,而不是对该字段进行一堆查询。在solr-hybrid-pseudocode中:
{!boost
switch (source) {
case "HIGHQUALITY": return 3
case "SVC1": return 2
default: return 1
}
}
答案 0 :(得分:1)
如果您的提升权重通常是静态的(即:不会针对每个请求进行更改),那么执行此类操作的最直接方式是使用外部文件字段...
lucene.apache.org/solr/api/org/apache/solr/schema/ExternalFileField.html
它的常见用例是为每个doc包含“id = value”对的映射,但不要求lookup字段是id / uniqueKey。您可以(在您的特定情况下)有一个简单的文件,列出“源”字段中每个已知值的5个映射,以及默认映射,然后该数值可以在函数中使用。
如果你真的需要在查询时使用任意值指定一个开关,那么在trunk中可以使用一些新的函数,应该使用嵌套的“if”函数实现这一点(但我没有'亲自测试过这个)...
wiki.apache.org/solr/FunctionQuery#if
wiki.apache.org/solr/FunctionQuery#termfreq
if(termfreq(source,'HIGHQLTY'),3,if(termfreq(source,'SVC1'),2,1))