【问题标题】:Exclude fields with null values in SOLR queries在 SOLR 查询中排除具有空值的字段
【发布时间】:2016-12-17 13:01:35
【问题描述】:

我正在尝试向使用 SOLR 进行查询的 API 发出 url 请求。

我有很多数据,其中有很多包含不同值的字段,并且通常其中一些字段包含空值。

我想进行查询,检索特定字段不为空但包含一些实际值的所有数据。

例如,每个条目都包含一个名为 tags 的字段,它是一个标签数组。例如,标签可以是单词 test。

我已经尝试过 -tags:[* TO *] 并导致返回所有标签为空的数据集。

我也尝试过 tags:[* TO *] 返回所有数据,其中标签为空,标签实际设置在哪里。

我一直在尝试各种事情来解决最后一种情况,即只返回带有值的标签,希望您能帮助我?

【问题讨论】:

  • 您可以尝试在您的标签字段上进行正则表达式匹配
  • 嗨@BinoyDalal你能详细说明一下它是如何工作的吗?
  • 类似tags:/[A-Za-z0-9]+/。我不确定 Unicode 是否支持正则表达式匹配器,但在大多数情况下,这应该可以工作。
  • 谢谢,问题似乎是在执行此操作时,空值在正则表达式中也是一种有效的可能性,因此它仍然会被计数并显示
  • 好的。您也可以尝试否定空查询。类似NOT -tags:[* TO *]

标签: solr edismax dismax


【解决方案1】:

您的问题有点令人困惑,因为您使用了诸如“检索数据”和“检索字段”之类的术语,这可能会造成混淆。在 SOLR 中,查询指定检索哪些文档(或记录)。

如果您想要在“标签”字段中具有某些价值的所有文档,您可以使用

(tags:*)

如果您想要在“标签”字段中没有值的所有文档,那么您可以使用:

(*:* AND NOT tags:*)  

(*:* AND -tags:*)

【讨论】:

  • 嗨雨果,谢谢你的回答,我试过(标签:*)如果它只是字符串字段,它工作正常,但似乎因为这是一个集合,它仍然返回字段里面有null
  • 该字段是否可能 empty 不为空?您可以使用自定义 UpdateRequestProcessor 链去除空字段。
  • 奇怪,您应该向我们展示这样一个文档的示例...也许如果您序列化为 JSON 而不是 XML,您会更清楚地看到值是什么(您可以使用 &wt =json 查询参数)
【解决方案2】:

andAND 不同 - 这是您必须在查询中使用的分隔符。

您的查询可能只是搜索(默认字段中包含and 的文档)或(deleted:false)或(tags:[* TO *])。

使用适当的分隔符和周围的空格来分组多个条件。我还建议对任何静态查询(例如deleted:false)使用过滤查询(fq),因为这样可以将该查询与您的实际查询分开缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    相关资源
    最近更新 更多