Haystack-Django:当用户开始输入查询时,如何实现搜索建议



我正在使用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这样的自动建议功能。我还想实现拼写检查功能。

请帮助我。

谢谢。

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

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

最新更新