复杂的 SOLR 查询,包括 NOT 和 OR

Posted

技术标签:

【中文标题】复杂的 SOLR 查询,包括 NOT 和 OR【英文标题】:Complex SOLR query including NOT and OR 【发布时间】:2012-05-28 04:04:09 【问题描述】:

我对 SOLR 搜索有一些相当复杂的要求,我需要针对我的标记内容数据库执行这些要求。我需要首先将数据库过滤到与我的过滤器标签匹配的那些结果。除非它们还包含白名单中的标签,否则应删除任何具有黑名单标签的结果。

假设我想检索所有标记为“森林”或“保护”的文档。但我想排除标记为“英国”或“欧洲”的文件——除非它们也被标记为“非洲”或“亚洲”。我试图在我的 SOLR 查询中写这个:

tag:((forest OR conservation) AND (africa OR asia OR !uk OR !europe))

逻辑对我来说似乎是合理的,但查询不起作用。我有 46 个文档标记为“森林”或“保护”——其中一个文档也标记为“亚洲”,没有一个文档标记为“英国”或“欧洲”,但查询未返回任何结果。

我还看到了有关 SOLR 的 fq(过滤查询)参数的信息,这听起来很有用。但这似乎也无济于事。似乎是 NOT 和 OR 的组合导致 SOLR 崩溃。

我正在尝试做的事情可能吗?我的逻辑是否有缺陷?这是在 SOLR 1.4 顺便说一句 - 如果这是一个已经在某处解决的问题....

感谢您的建议!

【问题讨论】:

SOLR 4.1,对吧? 不——它是 1.4!虽然升级了... 哦,你这个可怜的家伙。 :( 【参考方案1】:

试试

tag:((forest OR conservation) AND (africa OR asia OR (*:* AND !uk AND !europe)))

【讨论】:

谢谢 - 就是这样!你能解释一下为什么吗?似乎否定需要完整的集合(*:*)来匹配?

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

Web-第二十九天 Lucene&solr使用二悟空教程

复杂查询 指什么,包括哪些

solr介绍

基于Solr的HBase多条件查询测试

HBASE+Solr实现详单查询

C# Solr boost 未应用于生成的查询