1

我正在尝试为我的应用程序添加一个模块范围的搜索并找到 haystack-search。我带着嗖嗖声来存储搜索信息。

我已经按照文档中的说明配置了我的搜索,并且已经可以找到结果。

我遇到的问题是一个存储和电子邮件地址的字段(“test@testdomain.com”)。当我搜索“testdomain”时,我不会得到任何结果,但是当我搜索“tesdomain.com”时,我会得到一些结果。现在我想在输入“testdomain”时得到结果(输入“testdomain.com”时得到)。任何想法如何做到这一点?

有人曾在 haystack 的邮件列表中发过邮件吗?对我来说,即使我是 google-group 的成员也无法发帖。

问候马丁

4

1 回答 1

1

现在我有了问题的答案。haystack 附带的标准搜索不支持按子字符串搜索。

我创建了自己的应用程序(mysearch)用于搜索,它将使用 haystacksearch

您要做的就是创建自己的 SearchForm (mysearch/forms.py)

from django import forms
from haystack.forms import ModelSearchForm
from haystack.query import SearchQuerySet

class AutocompleteSearchForm(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(autocompletetext=self.cleaned_data.get('q'))

    sqs = sqs.models(*self.get_models())

    if self.load_all:
      sqs = sqs.load_all()

    return sqs

然后你必须使用你自己的 SearchForm (mysearch/urls.py) 创建你自己的 url-route

from django.conf.urls.defaults import *
from haystack.forms import ModelSearchForm
from haystack.query import SearchQuerySet
from haystack.views import SearchView
from forms import AutocompleteSearchForm

sqs = SearchQuerySet()

# Without threading...
urlpatterns = patterns('haystack.views',
  url(r'^$', SearchView(searchqueryset=sqs, form_class=AutocompleteSearchForm), name='haystack_search'),
)

在您的项目中使用 urls.py

url(r"^search/", include("mysearch.urls", namespace="Search")),

代替

url(r'^search/', include('haystack.urls', namespace="Search")),
于 2013-01-30T14:47:54.113 回答