jnn*_*nns 9 python django full-text-search django-queryset
我想在django博客应用程序中实现搜索功能.现状是我有一个用户提供的字符串列表,每个字符串缩小了查询集,只包括那些与字符串匹配的对象.
看到:
if request.method == "POST":
form = SearchForm(request.POST)
if form.is_valid():
posts = Post.objects.all()
for string in form.cleaned_data['query'].split():
posts = posts.filter(
Q(title__icontains=string) |
Q(text__icontains=string) |
Q(tags__name__exact=string)
)
return archive_index(request, queryset=posts, date_field='date')
Run Code Online (Sandbox Code Playgroud)
现在,如果我不想要连接由逻辑AND搜索但逻辑OR的每个单词怎么办?我该怎么办?有没有办法用Django自己的Queryset方法做到这一点,还是必须回退到原始的SQL查询?
一般来说,这样做全文搜索是一个合适的解决方案,还是建议使用像Solr,Whoosh或Xapian这样的搜索引擎.他们有什么好处?
And*_*lio 16
我建议你采用搜索引擎.
我们使用了Haystack搜索,django的模块化搜索应用程序支持许多搜索引擎(Solr,Xapian,Whoosh等...)
好处:
缺点:
我们对这个解决方案非常满意,并且很容易实现.
实际上,您发布的查询确实使用OR而不是AND - 您\
用来分隔Q
对象.并且会&
.
一般来说,我强烈建议使用合适的搜索引擎.我们在Solr之上使用Haystack取得了很好的成功 - Haystack管理所有Solr配置,并公开了一个非常类似于Django自己的ORM的漂亮API.