【问题标题】:Haystack with Elasticsearch refuses to create search index带有 Elasticsearch 的 Haystack 拒绝创建搜索索引
【发布时间】:2014-06-18 21:30:06
【问题描述】:

我正在使用连接到 Elasticsearch 服务器的 Django(主分支)和 Haystack(主分支)。 Python 版本是 3.4。

搜索索引类如下所示:

class PageIndex(indexes.SearchIndex, indexes.Indexable):
    text = fields.EdgeNgramField(document=True)
    name = fields.EdgeNgramField(model_attr='name', boost=2)
    tags = fields.EdgeNgramField(model_attr='tags', boost=1.5)
    description = fields.EdgeNgramField(model_attr='description_summary', boost=0.9)

    def get_model(self):
        return Page

    def index_queryset(self, using=None):
        return self.get_model().objects.filter(created__lte=datetime.datetime.now())

当我尝试创建索引时,出现以下错误:

> python manage.py update_index                                                                                                                                                                                                                                             Indexing 7 communities
PUT /haystack [status:400 request:0.013s]
ERROR:root:Error updating page using default 
Traceback (most recent call last):
  File "/env/lib/python3.4/site-packages/haystack/management/commands/update_index.py", line 221, in handle_label
    self.update_backend(label, using)
  File "/env/lib/python3.4/site-packages/haystack/management/commands/update_index.py", line 266, in update_backend
    do_update(backend, index, qs, start, end, total, self.verbosity)
  File "/env/lib/python3.4/site-packages/haystack/management/commands/update_index.py", line 89, in do_update
    backend.update(index, current_qs)
  File "/env/lib/python3.4/site-packages/haystack/backends/elasticsearch_backend.py", line 158, in update
    prepped_data = index.full_prepare(obj)
  File "/env/lib/python3.4/site-packages/haystack/indexes.py", line 204, in full_prepare
    self.prepared_data = self.prepare(obj)
  File "/env/lib/python3.4/site-packages/haystack/indexes.py", line 187, in prepare
    ID: get_identifier(obj),
  File "/env/lib/python3.4/site-packages/haystack/utils/__init__.py", line 33, in default_get_identifier
    obj_or_string._meta.module_name,
AttributeError: 'Options' object has no attribute 'module_name'

【问题讨论】:

    标签: django python-3.x elasticsearch django-haystack


    【解决方案1】:

    您收到此错误消息是因为在 Django >= 1.6 Options.module_name 更改为 .model_name(这是 widley 滥用的非公共 API),因此您只需要更改 haystack 代码 module_name

    【讨论】:

      【解决方案2】:

      您必须检查您的模型中是否有一个名为“name”的属性。

      models.py

      class Page(models.Model):
          name = models.CharField(max_length=20)
      

      search_index.py

      class PageIndex(indexes.SearchIndex, indexes.Indexable):
          name = fields.EdgeNgramField(model_attr='name', boost=2)
      

      【讨论】:

        猜你喜欢
        • 2019-06-14
        • 2015-09-21
        • 2015-12-28
        • 2015-10-22
        • 2012-08-12
        • 2023-03-06
        • 1970-01-01
        • 2016-05-12
        • 1970-01-01
        相关资源
        最近更新 更多