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

时间:2017-08-26 09:06:31

标签: php solr pecl

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

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

我一直在Solr Wiki页面(https://wiki.apache.org/solr/FunctionQuery#if)上阅读,其中有一些很好的例子,但我认为我可能实施错误,因为我没有看到预期的结果。我正在使用PECL PHP扩展程序并添加如下查询:

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

如果我执行*:*搜索,将返回大约900个结果,并且索引大约有8000条记录,其中只有2篇文章具有未来的活动日期,所有“文章”的总数大约为200它似乎是从其他“索引类型”中过滤掉而不是在else值上返回1(正数== true)。

总结,我需要一个查询字段“active-date”(仅在index-type:article上配置)的查询,检查日期是否在将来 - 如果为true则排除,如果false包含在结果集中,并且如果字段不存在则包含在结果集中。

提前致谢!

1 个答案:

答案 0 :(得分:0)

不确定您是否确实需要功能查询:

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

..只要所有文章对象上都存在active-date字段。如果不是,您可以在任何没有该字段的文档中为OR添加额外条件。

相关问题