按字段中定义的函数查询对结果进行排序或过滤

时间:2016-11-06 17:44:59

标签: solr lucene

我有一个Solr 6.2实例正在运行,我正在探索它的优点和局限性。我遇到的一个限制似乎是您无法根据字段函数查询对数据进行排序或过滤。

.../solr/collection/select?q=*:*&fl=*,total:sum(v1,v2)&fq=total:[10 TO *]

Solr响应错误,指出total字段不存在。实际上,该字段未在我的模式中定义,因为它不是数据集的存储部分 - 它是在查询时计算的。他们称之为伪场。我无法在文档或在线解决方案中找到示例。那么,有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

.../solr/collection/select?q=*:*&fl=*,total:sum(v1,v2)&fq={!frange l=10} sum(v1,v2)

我和你有同样的问题。 我想查询两个字段的特定除法值。

我试图像你一样使用[0.3 TO *]

如果需要,还可以使用范围的上限。

http://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-4.6.pdf

l ”用于下限。

u ”是上限。

fq={!frange l=0 u=2.2} sum(user_ranking,editor_ranking)

也许这对您有用吗?

答案 1 :(得分:-1)

你可以这样做。而不是总尝试总和。 你可以在这里找到更多信息。 https://wiki.apache.org/solr/FunctionQuery#What_is_a_Function.3F

来自唯一维基的一个例子。

  

示例功能查询
  为了让您更好地理解如何在Solr中使用函数查询,假设索引存储一些假设框的米x,y,z中的维度,其中任意名称存储在字段boxname中。假设我们要搜索框匹配名称查找框,但根据框的数量排名。查询参数为:
  q = boxname:findbox val :" product(x,y,z)"

     

此查询将根据卷对结果进行排名。为了获得计算的音量,您需要请求得分,其中包含结果音量:
  & fl = *,得分

     

假设您还有一个字段存储盒子的重量作为重量。要按框的密度排序并返回密度值,请提交以下查询:   http://localhost:8983/solr/collection_name/select?q=boxname:findbox val :" div(体重,产品(x,y,z))"& fl = boxname x y z weight score`

你可以在这里阅读更多相关信息。 https://cwiki.apache.org/confluence/display/solr/Function+Queries

试试这个 solr/collection/select?q=*:* _val_:"sum(v1,v2)"&fl=* score&fq={!frange l=10 }sum(v1,v2)