Solr - 对不一致字段的过滤查询函数

Solr - Filter query functions on inconsistent field

我目前正在开发一个安装了 Solr (6.4.0) 的项目,并且正在努力解决查询问题,我认为我需要使用查询函数来满足我的要求。

我的应用程序有一个 Solr 核心,它跨越 5 种不同的文档类型(用户可以索引网站、文档、文章等)。我遇到的问题是文章有开始和结束日期,因此用户可以提前创建一篇文章并将开始日期设置为从现在起 2 周。查询 Solr 时,我想添加一个函数,该函数将显式忽略所有索引类型:活动日期大于现在的文章,但不排除其他文档类型,如网站等。

我一直在阅读 Solr Wiki 页面 (https://wiki.apache.org/solr/FunctionQuery#if) where it has some good examples however I think I may be implementing wrong as I am not seeing the desired results. I am using the PECL PHP 扩展并添加查询,如下所示:

$query->addFilterQuery("if(exists(active-date), active-date:[* TO NOW], 1)");

如果我执行 *:* 搜索,会返回大约 900 个结果,索引有大约 8000 条记录,其中只有 2 篇文章的活动日期在未来,所有文章的总数 "articles"大约是 200,所以它似乎从其他 "index-types" 中过滤掉,而不是在 else 值上返回 1(正数 == true)。

总而言之,我需要一个查询来查找字段"active-date"(仅在索引类型:文章上配置),检查日期是否在未来 - 如果为真则排除,如果为假则包含在结果集中,如果字段不存在则包含在结果集中。

提前致谢!

不确定您是否真的需要函数查询:

fq=(index-type:article AND active-date:[* TO NOW]) OR (*:* -active-date:*)

.. 只要活动日期字段出现在所有文章对象上。如果不是,您可以在任何没有该字段的文档中向 OR 添加额外条件。