使用django haystack,如何仅使用部分术语执行搜索?
我有一个Haystack/xapian搜索索引,用于使用django haystack,如何仅使用部分术语执行搜索?,django,django-haystack,Django,Django Haystack,我有一个Haystack/xapian搜索索引,用于django.contrib.auth.models.User。模板非常简单 {{object.get_full_name}} 因为我希望用户键入一个名称并能够搜索它 我的问题是:如果我搜索,比如说,Sri(我的全名),我会找到与我的名字相关的用户对象的结果。但是,如果我搜索Sri Ragh——也就是我的全名和部分姓氏,我不会得到任何结果 如何设置Haystack,以便为部分查询获得适当的结果? (我基本上希望它搜索*Sri Ragh*,但我
django.contrib.auth.models.User
。模板非常简单
{{object.get_full_name}}
因为我希望用户键入一个名称并能够搜索它
我的问题是:如果我搜索,比如说,Sri
(我的全名),我会找到与我的名字相关的用户对象的结果。但是,如果我搜索Sri Ragh
——也就是我的全名和部分姓氏,我不会得到任何结果
如何设置Haystack,以便为部分查询获得适当的结果?
(我基本上希望它搜索*Sri Ragh*
,但我不知道通配符是否真的会起作用,或者如何实现它们)
这是我的搜索查询:
results = SearchQuerySet().filter(content='Sri Ragh')
我以前也遇到过类似的问题,作为一种解决方法,或者可能是一种修复方法,您可以更改查询查找
results = SearchQuerySet().filter(content__startswith='Sri Ragh')
问题是django haystack并没有实现搜索引擎的所有行话。你当然可以这样做
results = SearchQuerySet().raw_search('READ THE SEARCH ENGINE QUERY SYNTAX FOR GET WILDCARD LOOKUPS')
正如Django haystack所说,这是不可移植的。您可以使用icontains或startswith 注意这一点,如果一个查询是例如“r”,这将为您带来所有在其内容中有“r”的“模型”实体
Model.objects.filter(content__icontains=query)
Model.objects.filter(content__startswith=query)
看看,因为我使用的是默认的SearchView类,所以我最终使用了您的_startswith解决方案,将ModelSearchForm子类化,并将其传递给URL.py中SearchView的构造函数。谢谢你的帮助。我会尽快给你奖金。这是你做全文数据库搜索的方式,不使用搜索引擎。