【问题标题】:How to query Haystack to get similar items如何查询 Haystack 以获得相似的项目
【发布时间】:2019-05-09 05:20:30
【问题描述】:

当使用 Haystack 和 ElasticSearch 将帖子 ID 作为有效负载发送到端点(RESTful API)时,我正在尝试获取类似的帖子:

original_post = Article.objects.get(id=pk) #pk is 2 for example
related_items = SearchQuerySet().more_like_this(original_post.title)
result = related_items[0].object.title

print(result)

这会引发错误:

AttributeError: 'str' object has no attribute '_meta'

我是弹性搜索的新手。我做错了什么?

【问题讨论】:

  • 该错误表明您有一个预期为QuerySet 但包含字符串值的变量。调试 SearchQuerySet() 的评估方式。

标签: python django elasticsearch django-haystack


【解决方案1】:
related_items = SearchQuerySet().more_like_this(original_post)

见haystack docs中的函数定义:

SearchQuerySet.more_like_this(self, model_instance)

因此,您应该将 model_instance 传递给 more_like_this,而不是字符串。

【讨论】:

  • 它用The model <class 'posts.models.Article'> is not registered抛出了一个错误
  • 它返回了UserWarning: The model <class 'posts.models.Article'> is not registered for search.
  • @kinGKong 嗯,看来你在elasticsearch 中没有Articles 索引:github.com/django-haystack/django-haystack/blob/… 尝试python manage.py rebuild_index 并再次搜索。如果这不起作用,请在您的问题中添加您如何定义索引。
  • 我认为问题的出现是因为我没有定义索引。请问,文章索引应该在模型中创建还是用单个脚本编写?
  • @kinGKong 当然,你需要创建ArticleIndex 类,人们通常在应用程序中创建search_indexes.py,这是合适的地方。请参阅django-haystack.readthedocs.io/en/master/… 您必须定义类似于NoteIndex 的内容。但无论如何,这与你原来的问题不同。
猜你喜欢
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
相关资源
最近更新 更多