首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以查询Solr将字段值与函数的结果进行比较吗?

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

Stack Overflow用户
提问于 2017-11-09 20:04:21
回答 1查看 389关注 0票数 2

我有一个用例,在该用例中,我希望搜索Solr索引并查找所有文档,其中字段中的所有术语都在查询中。

查询中可能有更多不在字段中的术语。我只关心查询与字段中所有术语匹配的文档。

因此,假设我有以下文件:

代码语言:javascript
复制
[{
   field: term1 term2 term3
 },
 {
   field: term3 term4 term5
 }
 {
   field: term2 term3
 }]

当我查询Solr时

代码语言:javascript
复制
field: (term2 term3 term4)

我只想要第三份文件。同样,如果我查询

代码语言:javascript
复制
field: (term2 term3 term4 term5)

我想要第二和第三份文件。

到目前为止,我已经尝试将另一个字段添加到每个文档的索引中,这只是术语的计数,然后执行如下所示的筛选查询:

代码语言:javascript
复制
fieldTermCount:{!func v="sum(termfreq(field, 'term2'), 
                             termfreq(field, 'term3'), 
                             termfreq(field, 'term4'))"
               }

但它似乎对结果集没有任何作用。

当我将sum函数添加到字段列表中时,它按照预期正确地计算匹配项的数量,但我似乎不知道如何将该计算值与文档中的fieldCount进行比较。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-10 15:45:29

我解决了我的问题。

我对filterQuery做了一些修改,如下所示:

代码语言:javascript
复制
{!frange u=0 l=0}
    sub(fieldCount,
        sum(termfreq(field, 'term2'), 
            termfreq(field, 'term3'),
            termfreq(field, 'term4')
           )
        )

这里要做的是,取fieldCount,减去匹配项的数目。然后执行范围查询,只从该操作中带回具有0的文档(即不匹配任何条件)。

还请注意,这只是因为我的文档中的术语从未重复。如果这些术语在文档中重复,那么您可能必须执行一个if函数调用,如果10的值为termfreq > 0,则只返回termfreq > 0

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47210609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档