haystack-django:当用户开始输入查询时如何实现搜索建议?

时间:2018-03-17 03:15:08

标签: django solr django-haystack

我使用Django == 1.11.8,django-haystack == 2.7.0,pysolr == 3.7.0和Solr == 6.6.3和Python3

这是一个名为MainData的模型,我希望从中显示搜索结果。

from django.db.models import *
from django.db import models as models


class MainData(models.Model):
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)
    url = models.CharField(max_length=1000)
    title = models.CharField(max_length=250, blank=True, null=True)
    metadata = models.TextField(max_length=500, blank=True, null=True)
    meta_keywords = models.TextField(max_length=1000, blank=True, null=True)
    context = models.TextField(max_length=1000, blank=True, null=True)


    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return str(self.title)

    def get_absolute_url(self):
        return self.url

我的search_index.py文件:

import datetime
from haystack import indexes
from .models import MainData


class MainSearchIndex(indexes.SearchIndex, indexes.Indexable):
    text = indexes.CharField(document=True, use_template=True)
    url = indexes.CharField(model_attr='url', null=True)
    title = indexes.EdgeNgramField(model_attr='title', null=True)
    metadata = indexes.EdgeNgramField(model_attr='metadata', null=True)
    meta_keywords = indexes.CharField(model_attr='meta_keywords', null=True)
    context = indexes.EdgeNgramField(model_attr='context', null=True)
    suggestions = indexes.FacetCharField()

    def get_model(self):
        return MainData

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

    def prepare(self, obj):
        prepared_data = super(MainSearchIndex, self).prepare(obj)
        prepared_data['suggestions'] = prepared_data['text']
        return prepared_data

现在,我的问题是,当用户开始输入内容时,如何实现Google等自动建议功能。我还想实现拼写检查功能。

请帮帮我。

谢谢。

1 个答案:

答案 0 :(得分:0)

在haystack django文档中有一些关于自动完成的好信息。

https://django-haystack.readthedocs.io/en/v2.7.0/autocomplete.html