【问题标题】:Invalid Date in Date Math String error while creating indexes using Django 1.9 and Solr 6.1使用 Django 1.9 和 Solr 6.1 创建索引时,日期数学字符串中的日期无效
【发布时间】:2016-11-19 13:00:47
【问题描述】:

我正在尝试使用 Solr 及其交互模块 PySolr 在我的 Django 项目中实现搜索,该模块通过 Haystack 运行。我能够正确配置 Solr,但是当我运行命令 python manage.py rebuild_index 时,我收到错误 Invalid Date in Date Math String

根据official documentation of Solr,Solr 日期时间格式是YYYY-MM-DDThh:mm:ssZ(例如2016-07-13T14:31:07.237204Z),但PySolr 中的日期时间格式可能是YYYY-MM-DDThh:mm:ss+TT:TTZ(例如2016-07-13T14:31:07.237204+03:00Z),其中TT:TT 是时区偏移(分别为小时和分钟)。

我在 search_indexes.py 中的代码:

from haystack import indexes
from .models import Item

class ItemIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    name = indexes.CharField(model_attr='name')
    updated = indexes.DateTimeField(model_attr='updated')

    def get_model(self):
        return Item

    def index_queryset(self, using=None):
        return self.get_model().objects.all()

任何想法如何解决这个错误?

【问题讨论】:

    标签: python django datetime solr


    【解决方案1】:

    解决问题的方法非常简单。 Haystack 后端有prepare_FOO(self, obj) 函数,其中FOO 是索引字段之一。此函数允许您在为每个 FOO 元素编制索引之前更新获得的值。因此,我们可以对updated字段中的每个日期时间进行后处理,并将其转换为默认的Solr格式。

    在我的例子中,代码如下所示:

    class ItemIndex(indexes.SearchIndex, indexes.Indexable):
        text = indexes.CharField(document=True, use_template=True)
        name = indexes.CharField(model_attr='name')
        updated = indexes.DateTimeField(model_attr='updated')
    
        def get_model(self):
            return Item
    
        def index_queryset(self, using=None):
            return self.get_model().objects.all()
    
        def prepare_updated(self, obj):
            updated = u''
    
            if 'updated' in self.prepared_data:
                updated = self.prepared_data['updated'].strftime('%Y-%m-%dT%H:%M:%SZ')
    
            return updated
    

    prepare_updated(self, obj) 函数在索引期间获取updated 字段中的每个日期时间并将其转换为YYYY-MM-DDThh:mm:ssZ 形式。

    【讨论】:

      猜你喜欢
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-27
      • 2017-05-05
      相关资源
      最近更新 更多