gpt4 book ai didi

django - 使用 Django Haystack 自动完成

转载 作者:行者123 更新时间:2023-12-02 01:05:33 25 4
gpt4 key购买 nike

我很难在搜索表单中使用 haystack 和 Solr 自动完成功能。按照此处的说明进行操作 Auto-complete我能够通过以下方式创建索引。

class PersonIndex(indexes.RealTimeSearchIndex, indexes.Indexable):
text = CharField(document=True, use_template=True)
first_name = CharField(model_attr='first_name')
last_name = CharField(model_attr='last_name')
first_name_auto = indexes.EdgeNgramField(model_attr='first_name')


def index_queryset(self):
"""Used when the entire index for model is updated."""
return self.get_model().objects.all().order_by('first_name')

def get_model(self):
return Person

按照我的 URL 路由的设置方式,我没有定向到的 View 请求,搜索方法可以正常工作。

url(r'^search/person/', search_view_factory(
view_class=SearchView,
template='index.html',
form_class=ModelSearchForm
), name='haystack_search'),

说明说我们可以以这种方式执行查询

from haystack.query import SearchQuerySet

sqs = SearchQuerySet().filter(content_auto=request.GET.get('q', ''))

但是我们把这个 SearchQuerySet 放在哪里,我不知道要覆盖什么,如何修改我的 url 以正确路由。我的搜索目前以这种方式开箱即用,但我想尝试使用 EdgeNgramField 自动完成?

最佳答案

您需要定义自己的自定义搜索表单并告诉它如何生成 SearchQuerySet它返回到 View ,然后告诉你search_view_factory使用该形式代替 ModelSearchForm .

指定您想要生成 SearchQuerySet 的方式您的 View 通过覆盖 ModelSearchForm 使用搜索方法:

from haystack.forms import ModelSearchForm

class AutocompleteModelSearchForm(ModelSearchForm):

def search(self):
if not self.is_valid():
return self.no_query_found()
if not self.cleaned_data.get('q')
return self.no_query_found()
sqs = self.searchqueryset.filter(first_name_auto=self.cleaned_data['q'])

if self.load_all
sqs = sqs.load_all()

return sqs

现在将对表单的 SearchQuerySet 执行过滤器关于first_name_auto字段而不是 auto_query它通常会在 text 上执行字段(请参阅 haystack/forms.py 以查看原始搜索功能的样子)。

您指定要在 search_view_factory 的参数列表中使用此形式

from path.to.your.forms import AutocompleteModelSearchForm

url(r'^search/person/', search_view_factory(
view_class=SearchView,
template='index.html',
form_class=AutocompleteModelSearchForm
), name='haystack_search'),

关于django - 使用 Django Haystack 自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com