我尝试使用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
如何修复此错误?
答案 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
形式。