django haystack模块搜索与whoosh

时间:2013-01-16 10:38:05

标签: python django django-haystack whoosh

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

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

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

有人曾发布过干草堆的邮件列表吗?对我来说,即使我是google-group的成员也无法发布。

问候 马丁

1 个答案:

答案 0 :(得分: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")),