使用 Apache Solr 进行 Drupal 日期范围索引

Posted

技术标签:

【中文标题】使用 Apache Solr 进行 Drupal 日期范围索引【英文标题】:Drupal date range indexing with Apache Solr 【发布时间】:2015-09-12 09:29:58 【问题描述】:

我正在使用这些 drupal 模块

search_api 
search_api_solr
date_range_formatter 
views 

实际上还有许多其他模块可以让我的 Solr / Drupal 项目索引大约 100000 个内容节点。

设置运行良好,但我需要从 Solr 获取日期范围字段的搜索结果,这就是我卡住的地方。

不知何故,我坚持设置正确的运算符“介于”和“不介于”,而使用“=”在这里造成了麻烦。

我无法获得我的 Solr 查询

field[1 TO *] AND field[* TO 10]

上班。

一种内容类型可以有多个可供搜索的日期范围。

用户可以搜索开始日期和结束日期。日期范围应在索引实体类型的每个单独日期范围内匹配。

假设它是有效的:

2015-10-01 to 2015-10-10
2015-11-01 to 2015-11-10
...

等等。

为了让我开始并以正确的方式对问题进行分类,我首先需要知道:

在 Drupal 中存储日期范围以在 Solr 端建立索引的最佳做法是什么?日期范围是一种好方法,还是更好地存储一个范围,其中包含每天的值,例如:

2015-10-01
2015-10-02
2015-10-03
...

Solr 索引日期范围的最佳方法是什么?

您建议在 Drupal 中使用哪种字段类型将值存储在实体类型中以便能够将其发送到 Drupal?

我知道我不是第一个为此苦苦挣扎的人。详细信息可以在这里找到:

https://www.drupal.org/node/1783746

但幸运的是,这些补丁对我的设置都没有错误。我竭尽全力让这一切顺利进行。现在我正在寻找任何可能有助于追查我最后的错误的建议、总结或想法。

非常感谢任何建议或想法。

谢谢。

【问题讨论】:

【参考方案1】:

这不是一步一步的解决方案。我只是想告诉你如何让它适应你的项目并且仍然与 search_apisearch_api_solr 兼容:

一种可能的解决方案是在每个日期的一个字段中分别存储和索引来自实体的日期

2015-10-01
2015-10-02
2015-10-03
...

使用后

function mymodule_search_api_views_query_alter(
view &$view,SearchApiViewsQuery &$query) 

 ...
   
 

添加缺少的查询条件,如

AND field_name = 2015-10-01 (as timestamp)
AND field_name = 2015-10-02
AND field_name = 2015-10-03

照顾所有条件。

我希望这对需要类似解决方案的人有所帮助。

【讨论】:

以上是关于使用 Apache Solr 进行 Drupal 日期范围索引的主要内容,如果未能解决你的问题,请参考以下文章

索引时 Apache SOLR 3.5 挂起

让ExtractingRequestHandler在Solr中工作

Drupal - 搜索视图不触发Solr请求

Drupal 方面相关性排序 - 将 Solr 查询运算符从“AND”更改为“OR”?

Tomcat7安装配置 for Ubuntu

使用 Apache Shiro 在自定义 Java Web 应用程序与 Drupal 之间进行 SSO 集成