重新组合成函数查询

时间:2012-05-08 18:48:23

标签: solr

使用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
    }
}

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))