使用Django 1.9和Solr 6.1创建索引时,日期数学字符串中的日期无效

时间:2016-07-16 12:01:03

标签: python django datetime solr

我尝试使用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(例如{{ 1}}),其中2016-07-13T14:31:07.237204+03:00Z是时区偏移(分别为小时和分钟)。

我在search_indexes.py中的代码:

TT:TT

如何修复此错误?

1 个答案:

答案 0 :(得分:0)

解决这个问题的方法非常简单。干草堆后端具有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形式。