我有一个用例,我想搜索 Solr 索引并查找字段中所有术语都在查询中的所有文档。
查询可能包含更多不在该字段中的术语。我只关心查询与字段中所有术语匹配的文档。
假设我有以下文档:
[{
field: term1 term2 term3
},
{
field: term3 term4 term5
}
{
field: term2 term3
}]
当我使用
查询 Solr 时field: (term2 term3 term4)
我只想要第三个文档。另外,如果我查询
field: (term2 term3 term4 term5)
我想要第二个和第三个文档。
到目前为止,我已经尝试向每个文档的索引添加另一个字段,该字段只是术语的计数,然后执行如下所示的过滤器查询:
fieldTermCount:{!func v="sum(termfreq(field, 'term2'),
termfreq(field, 'term3'),
termfreq(field, 'term4'))"
}
但它似乎对结果集没有任何作用。
当我添加sum
时函数到字段列表,它按预期正确计算匹配项的数量,但我似乎无法弄清楚如何将该计算值与 fieldCount
进行比较在文档上。
最佳答案
我找到了我的问题。
我对 filterQuery
进行了一些修改,如下所示:
{!frange u=0 l=0}
sub(fieldCount,
sum(termfreq(field, 'term2'),
termfreq(field, 'term3'),
termfreq(field, 'term4')
)
)
这里发生的是我获取fieldCount
并从中减去匹配术语的数量。然后进行范围查询,仅从该操作中返回具有 0
的文档(即没有不匹配的术语)。
另请注意,这只有效,因为我的文档中的术语从不重复。如果这些术语在您的文档中重复,您可能需要执行 if
函数调用,该函数调用仅返回 1
或 0
(如果 >termfreq > 0
。
关于solr - 您可以查询 Solr 以将字段值与函数的结果进行比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47210609/