在不一致的字段上过滤查询功能
我目前正在研究一个使用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条记录,其中只有两篇文章具有将来的活动日期,并且所有“文章”的总数大约为200,因此它似乎正在过滤在其他“索引类型”之外,而不是在else值上返回1(正数==真)。
总之 ,我需要一个查询字段“active-date”(仅在index-type:article上配置),检查日期是否在将来 - 如果为true,则排除,如果false包含在结果中设置,如果字段不存在包含在结果集中。
提前致谢!
不知道你是否真的需要一个函数查询:
fq=(index-type:article AND active-date:[* TO NOW]) OR (*:* -active-date:*)
..只要活动日期字段出现在所有物品对象上。 如果不是,您可以在没有该字段的任何文档中为OR
添加额外条件。