【发布时间】:2017-08-26 09:06:31
【问题描述】:
我目前正在处理一个安装了 Solr (6.4.0) 的项目,并且努力解决查询问题,我认为我需要使用查询功能来满足我的要求。
我的应用程序有一个 Solr 核心,它跨越 5 种不同的文档类型(用户可以索引网站、文档、文章等)。我遇到的问题是文章有开始和结束日期,因此用户可以提前创建文章并将开始日期设置为 2 周后。在查询 Solr 时,我想添加一个函数,该函数将明确忽略所有 index-type:article,其中活动日期大于现在,但不排除其他文档类型,如网站等。
我一直在阅读 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,则包含在结果集中,如果字段不存在,则包含在结果集中。
提前致谢!
【问题讨论】: