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

vit*_*tch 5 search logic solr boolean-logic

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

所以,假设我要检索标记为"森林"或"保护"的所有文档.但我想排除标记为"英国"或"欧洲"的文件 - 除非它们也标有"非洲"或"亚洲".我试着在我的SOLR查询中写这个:

tag:((forest OR conservation) AND (africa OR asia OR !uk OR !europe))
Run Code Online (Sandbox Code Playgroud)

逻辑看起来对我来说听起来不错,但查询不起作用.我有46个标有"森林"或"保护"的文件 - 其中一个也标有"亚洲",其中没有一个标有"英国"或"欧洲",但查询没有返回任何结果.

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

我正在尝试做什么?我的逻辑在某处有缺陷吗?这是在SOLR 1.4顺便说一句 - 这是一个已在某处解决的问题....

谢谢你的建议!

Per*_*ium 8

尝试

tag:((forest OR conservation) AND (africa OR asia OR (*:* AND !uk AND !europe)))
Run Code Online (Sandbox Code Playgroud)

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