Django中替代/建议搜索的最佳选项
我有一个Django应用,它可以根据用户输入的关键词从一个叫做Classified
的模型中搜索数据,并把结果显示出来。这一切运行得很好,我对此没有任何抱怨。
不过,如果有人输入的关键词没有找到任何数据,我想提供一些替代的搜索建议。
比如说,有人搜索“救护车服务”,但没有找到相关数据。我想建议“救护车”或“服务”作为替代搜索选项,这样可能会根据模型中的数据找到一些结果。
我在网上搜索了django中的建议搜索
,找到了Haystack/elastic search等选项,但我不太确定这些是否真的必要,因为我的搜索只是在一个模型中进行。
注意:StackOverflow告诉我我的问题可能会被关闭,因为它有些主观。如果是这样的话,请告诉我该把它移到哪里。谢谢!
2 个回答
1
这只是一个想法,但可能对你有帮助:
用户输入搜索内容:“救护车服务”
如果在这个视图中查询没有结果,就用你选择的备用搜索内容,比如“救护车”,重新加载同一个视图,并设置一个标记,表示你正在进行一个推荐搜索。
你需要考虑两件事:
如果备用搜索也没有结果怎么办?你需要在这里设置一个递归限制。
我该如何选择备用搜索的数据?嗯,这又是一个完全不同的话题。
这是这个想法的代码示例:
def search(request, data, alternate=False, recursion_level=3):
result = Classified.objects.filter(some_filed=data)
if 0 == result.count() and 0 != recursion_level: # Conditions needed for perform alternate search.
new_data = select_new_data(data) # The logic inside this function is up to you.
r_level = recursion_level - 1 # Decreas recursion level.
return redirect('search', alternate=True, recursion_level=r_level) # Redirecting using view name, you can use others
# forms of redirection see link below for visit
# the Djando redirect API doc.
else:
return_data = {}
if alternate:
# You can use this flag in order to reflect
# to the user you have performed an alternate search.
# Example:
return_data["alternate"] = True
# Build your return data.
# and render.
#return render_to_template()
Django重定向文档:redirect