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

标签 search solr logic boolean-logic

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

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

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

逻辑对我来说似乎是合理的,但查询不起作用。我有 46 个文件被标记为“forest”或“conservation”——其中一个也被标记为“asia”,没有一个被标记为“uk”或“europe”,但查询没有返回任何结果。

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

我正在尝试做的可能吗?我的逻辑有问题吗?这是在 SOLR 1.4 顺便说一句 - 以防这是一个已经在某处解决的问题......

感谢您的任何建议!

最佳答案

尝试

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

关于search - 复杂的 SOLR 查询,包括 NOT 和 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688910/

相关文章:

windows - 在内存中加载整个 Solr 实例

solr - Solr/ElasticSearch-通过ID查找文档->查询还是filterQuery?

logic - 伊莎贝尔中的 ⋀ 是什么意思?

search - 有什么方法可以跟踪 Solr 搜索结果返回了多少次?

php - 基于关键词的 PHP 中的 MySQL 搜索

java - Apache Solr - 为什么分片索引的结果分数与非分片索引的结果分数不同?

mysql - 如何优化聊天消息在数据库中的存储

logic - 测试逻辑表达式的工具

algorithm - 探索某些点的最短路径是什么

vb.net - 加快大量数据的搜索过程?