Solr 过滤器查询,包括 NOT 和 OR

Posted

技术标签:

【中文标题】Solr 过滤器查询,包括 NOT 和 OR【英文标题】:Solr filter query including NOT and OR 【发布时间】:2013-05-20 13:35:00 【问题描述】:

对于 Solr 中的过滤器查询,我需要包含所有非特定类型的文档,以及在特定字段中具有值的该类型的任何文档。

我试过了:

fq=(-type_id:(A) OR content:(['' TO *]))

但不包括type_id B、C 等具有空content 的文档。 (type_idstring 字段,contenttext。)

我看过这个问题:Complex SOLR query including NOT and OR 和这篇关于运营商的帖子:http://robotlibrarian.billdueber.com/2011/12/solr-and-boolean-operators/。我认为我的语法应该是正确的。谁能看到我的错误?


更新:我正在使用 LuceneQParser。它将上面的过滤查询解析为

-type_id:A content:['' TO *]

它将 cmets (-type_id:A OR (content:[* TO *] AND type_id:A)) 中建议的过滤查询解析为

-type_id:A (+content:[* TO *] +type_id:A)

所以没有结果。

【问题讨论】:

你想达到什么目的?? type_id 不是 A 或所有没有内容或某些内容的文档? @Jayendra 看我问题的第一句话:对非 type_id=A 的文档没有限制;如果它们是 type_id=A,它们应该有非空内容。例如,我也尝试过fq=((type_id:(A) AND content:(['' TO *])) OR type_id:(*)),但仍然没有运气。 你可以试试 fq=-type_id:A OR (content:[* TO *] AND type_id:A) @Jayendra 我尝试了您对过滤器查询的建议;现在我没有得到任何结果。请在我更新的问题中查看查询解析器信息。 【参考方案1】:

否定需要一个完整的集合来匹配它,所以你的过滤器应该是:

fq=((*:* AND -type_id:A) OR content:(['' TO *]))

【讨论】:

啊,希望在我还在做那份工作的时候就发布了!无法测试它,但它是有道理的,所以谢谢!接受。

以上是关于Solr 过滤器查询,包括 NOT 和 OR的主要内容,如果未能解决你的问题,请参考以下文章

运行具有大量过滤的 Solr Query 时出现 SocketException

Solr实现 并集式多值复杂 过滤查询的权限

如何根据Django Solr中选定的类别形成正确的查询列表

Solr

如何让 Solr 不索引查询中的常用词?

solr 查询的相关配置