solr - 您可以查询 Solr 以将字段值与函数的结果进行比较吗?

标签 solr lucene

我有一个用例,我想搜索 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 函数调用,该函数调用仅返回 10(如果 >termfreq > 0

关于solr - 您可以查询 Solr 以将字段值与函数的结果进行比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47210609/

相关文章:

elasticsearch - 在Solr 5.3.1中替换ApostropheFilterFactory

java - 使用 IntField 的 Lucene 搜索查询在文档更新后不起作用

Solr:发布的文件数不等于 maxDoc

apache - 如何使用 Apache Lucene 5.3.1 仅索引最小长度的单词?

java - 如何优化solr索引

elasticsearch - Elastic Search - 按索引聚合分组

java - 如何使用 Lucene 将 LowerCase 应用于字符串

java - 在java异常中使用Solrj

search - 每天索引中的文档

java - 基于文本文档的索引在调色板上实现图像索引 (Solr)