indexing - 将 SQS 与相关数据结合使用 (Haystack)

标签 indexing many-to-many django-haystack

我有两个段落模型字段,其中一个是 ManyToMany 字段。

class Tag(models.Model):
    tag = models.CharField(max_length=500)
    def __unicode__(self):
        return self.tag
admin.site.register(Tag)

class Paragraph(models.Model):
    article = models.ForeignKey(Article)
    text = models.TextField()
    tags = models.ManyToManyField(Tag)
    def __unicode__(self):
        return "Headline: " + self.article.headline + " Tags: " +  ', '.join([t.tag for t in self.tags.all()])
admin.site.register(Paragraph)

我的 .txt 文件反射(reflect)了与索引标签的多对多关系 -

{{object.text}}
{% for tag in object.tags.all %}
{{tag.tag}}
{% endfor %}

然后,我的views.py使用SQS搜索所有标签(我想在包含文本字段之前先完成此操作)并检索这些标签。所以在这种情况下,查询是“政治”-

def politics(request):
    paragraphs = []
    sqs = SearchQuerySet().filter(tag="Politics")
    paragraphs = [a.object for a in sqs[0:10]]
    return render_to_response("search/home_politics.html",{"paragraphs":paragraphs},context_instance=RequestContext(request))

编辑: 和我的 search_indexes.py

class ParagraphIndex(indexes.SearchIndex, indexes.Indexable):
    text= indexes.CharField(document=True, use_template=True)
    tags= indexes.CharField(model_attr='tags')
    def get_model(self):
        return Paragraph
    def index_queryset(self):
        return self.get_model().objects
    def load_all_queryset(self):
        # Pull all objects related to the Paragraph in search results.                                                                                                                    
        return Paragraph.objects.all().select_related()

但是,即使有几个段落具有“政治”标签,这也不会检索到任何内容。我在这里遗漏了什么吗?或者我应该以其他方式处理相关数据?我是 Haystack 的初学者,因此我们将不胜感激。提前致谢!

最佳答案

所以这是一个非常useful article这帮助我解决了问题。

根据这篇文章,我的 search_indexes.py 现在的样子:

class ParagraphIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    tags = indexes.MultiValueField()

    def prepare_tags(self,object):
        return [tag.tag for tag in object.tags.all()]

    def get_model(self):
        return Paragraph

    def index_queryset(self):
        return self.get_model().objects

    def load_all_queryset(self):
        # Pull all objects related to Paragraph in search results.                                                                                  
        return Paragraph.objects.all().select_related()

和我的观点.py:

def politics(request):
    paragraphs = []
    sqs = SearchQuerySet().filter(tags='Politics')
    paragraphs = [a.object for a in sqs[0:10]]
    return render_to_response("search/home.html",
            {"paragraphs":paragraphs},
            context_instance=RequestContext(request))

我正在使用elasticsearch作为引擎。希望这有帮助!

关于indexing - 将 SQS 与相关数据结合使用 (Haystack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15351499/

相关文章:

postgresql - 我如何创建一个有效的索引来快速检索最后一天的数据?

java - 按回车键时程序不会继续。我该如何解决这个错误?

postgresql - 为什么删除索引比创建索引花费的时间更长?

c# - Entity Framework 中的大规模增删多对多关系

django - 如何使用 django-haystack 按字符串形式搜索整数字段(例如 "priority")?

django - 无法在 django haystack 中重建索引

indexing - solr 的 WSO2 API 管理器问题

asp.net-core - 如何在 EF Core 上创建自定义导航属性

php - 我如何从laravel中的中间表(多对多关系)获取数据

python - 有人可以解释如何完成本教程的最后一步