Web 如何在solr colums上执行比较

Web 如何在solr colums上执行比较,web,solr,fetch,Web,Solr,Fetch,我有一个solr索引表,如果一列大于另一列,我想在其中过滤结果,到目前为止,我能够指定特定列的范围,但无法对两列进行比较。我在这篇文章中读到,我需要创建一个新列,在其中我必须存储比较结果,然后从中获取结果。但我不知道如何开始。任何帮助都将不胜感激 编辑1: 显示结果如果column1>column2您可以在fq参数中实现函数查询(fq代表过滤器查询,但接受解析后允许函数的查询): (如果不希望包含第1列和第2列相等的文档,请将0更改为0.1或类似内容) 如果您总是在同一个位置比较这两列,那么前面

我有一个solr索引表,如果一列大于另一列,我想在其中过滤结果,到目前为止,我能够指定特定列的范围,但无法对两列进行比较。我在这篇文章中读到,我需要创建一个新列,在其中我必须存储比较结果,然后从中获取结果。但我不知道如何开始。任何帮助都将不胜感激

编辑1:


显示结果如果column1>column2

您可以在
fq
参数中实现函数查询(
fq
代表过滤器查询,但接受解析后允许函数的查询):

(如果不希望包含第1列和第2列相等的文档,请将0更改为
0.1
或类似内容)

如果您总是在同一个位置比较这两列,那么前面关于在索引时进行比较的答案确实是最好的方法,因为它允许Solr缓存结果并在结果中构建适当的索引

具体的操作方式取决于索引的方式,所以这取决于您自己的代码。您将定义一个布尔字段
column1\u大于\u column2
(具有布尔字段类型),然后根据减法结果指定一个值:

doc.set('column1_larger_than_column2', (column1 - column2) > 0)

@MatsLindh回答得很好!但我认为写作中有一个错误。它应该是sub,而不是sum:

fq={!frange l=0 incl=false}sub(column1,column2)
仅查找列1的值大于列2的值的文档,或

{!frange l=0 incl=false}sub(column2,column1)
仅查找列1的值低于列2的值的文档

另外,“incl=false”可确保column1始终大于/小于column2,且从不相等


要查找>=或我尝试使用此。但它显示
不能在多值字段上使用FieldCache:
使字段非多值。多值字段上的
sub()
是什么意思?我想你会从中得到答案
{!frange l=0 incl=false}sub(column2,column1)