Solr 重新组合为函数查询

Solr 重新组合为函数查询,solr,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不是“源”字段值的真实名称。我们不能完全假设它们是阿尔法有序的,

使用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不是“源”字段值的真实名称。我们不能完全假设它们是阿尔法有序的,或者可能是

我要寻找的是一个函数,它根据源索引字段的值返回一个boost,而不是对该字段执行一系列查询。在solr混合伪码中:

{!boost 
    switch (source) {
    case "HIGHQUALITY": return 3
    case "SVC1": return 2
    default: return 1
    }
}

如果您的提升权重通常是静态的(即:不要对每个请求都更改),那么最直接的方法就是使用外部文件字段

lucene.apache.org/solr/api/org/apache/solr/schema/ExternalFileField.html

它的常见用例是为每个文档包含“id=value”对的映射,但不要求查找字段是id/uniqueKey。您可以(在您的特定情况下)有一个简单的文件,列出“源”字段中每个已知值的5个映射,以及一个默认映射,然后可以在函数中使用该数值

如果您真的需要在查询时使用任意值指定一个开关,那么trunk中提供了一些新函数,可以使用嵌套的“If”函数实现这一点(但我个人还没有对此进行测试)

wiki.apache.org/solr/FunctionQuery#if

wiki.apache.org/solr/FunctionQuery#termfreq


如果您的提升权重通常是静态的(即:不要对每个请求都更改),那么最直接的方法就是使用外部文件字段

lucene.apache.org/solr/api/org/apache/solr/schema/ExternalFileField.html

它的常见用例是为每个文档包含“id=value”对的映射,但不要求查找字段是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))