我有一个用例,在该用例中,我希望搜索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进行比较。
发布于 2017-11-10 15:45:29
我解决了我的问题。
我对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,则只返回termfreq > 0。
https://stackoverflow.com/questions/47210609
复制相似问题