【问题标题】:How to perform comparison on solr colums如何对 solr 列进行比较
【发布时间】:2018-03-17 09:33:10
【问题描述】:

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

编辑 1:

如果 column1 > column2 则显示结果

【问题讨论】:

标签: web solr fetch


【解决方案1】:

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

fq={!frange l=0}sub(column1,column2)

(如果您不想包含 column1 和 column2 相等的文档,请将 0 更改为 0.1 或类似的东西)

如果您总是在同一列中比较这两列,那么之前关于在索引时执行此操作的答案确实是最好的方法,因为它允许 Solr 缓存结果并在结果中建立适当的索引。

具体如何执行取决于您的索引方式,因此这取决于您自己的代码。您将定义一个布尔字段 column1_larger_than_column2(具有 BoolField 类型),然后根据减法的结果分配一个值:

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

【讨论】:

  • 我试过用这个。但它显示can not use FieldCache on multivalued field:
  • 使字段非多值。多值字段上的sub() 是什么意思?
【解决方案2】:

@MatsLindh 很好的答案!但我认为写作有错误。它应该是 sub,而不是 sum:

fq={!frange l=0 incl=false}sub(column1,column2)

仅查找 column1 的值大于 column2 的值的文档或

{!frange l=0 incl=false}sub(column2,column1)

仅查找 column1 的值低于 column2 的值的文档。

此外,“incl=false”确保 column1 始终大于/小于 column2,从不等于。

要查找 >= 或

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-02-13
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多