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