我在Django 1.4(Python为2.7)使用干草堆 1.2.7+2.4.0
示例:搜索查询“sear”应匹配含有“sear”和“sear”和“sear”和“sear”(etc)的项目。
我的设置 :
HAYSTACK_SITECONF = verticalsoftware.search.search_sites
HAYSTACK_SEARCH_ENGINE = whoosh
HAYSTACK_WHOOSH_PATH = C:/whoosh/prodeo_index
HAYSTACK_INCLUDE_SPELLING = True
搜索索引 :
class GalleryIndex(SearchIndex):
text = indexes.CharField(document=True, use_template=True)
content_auto = indexes.NgramField(model_attr= title )
def index_queryset(self):
"""Used when the entire index for model is updated."""
return Gallery.objects.filter(date_added__lte=datetime.datetime.now())
与EdgeNgram Field和(或) RealTimeSearchIndex一起尝试过
urlCONF:
from django.conf.urls.defaults import *
from verticalsoftware.search.views import SearchWithRequest
urlpatterns = patterns( haystack.views ,
url(r ^$ , SearchWithRequest(), name= haystack_search ),
)
自定义视图 :
from haystack.views import SearchView
import operator
from haystack.query import SearchQuerySet, SQ
class SearchWithRequest(SearchView):
__name__ = SearchWithRequest
def build_form(self, form_kwargs=None):
if form_kwargs is None:
form_kwargs = {}
if self.searchqueryset is None:
sqs = SearchQuerySet().filter(reduce(operator.__or__, [SQ(text=word.strip()) for word in self.request.GET.get("q").split( )]))
form_kwargs[ searchqueryset ] = sqs
return super(SearchWithRequest, self).build_form(form_kwargs)
对于 qs 我尝试了所有可以想象到的事物, 使用过滤器和自动完成, 正如在文件及我能找到的每个相关论坛文章中所看到的那样; 使用 __ 启动和 __ 封并结合我的内容_ 自动或文本字段 根本无济于事( 后者根本不匹配任何内容; 而前者只匹配一个字符或完整字符串 )
上面粘贴的变量至少具有返回与空格字符串连接结果的好处(每个字仍然必须完全匹配相应的数据库条目,因此需要这个员额)
任何援助,都确是感谢的,