Django中替代/建议搜索的最佳选项

0 投票
2 回答
999 浏览
提问于 2025-04-18 13:43

我有一个Django应用,它可以根据用户输入的关键词从一个叫做Classified的模型中搜索数据,并把结果显示出来。这一切运行得很好,我对此没有任何抱怨。

不过,如果有人输入的关键词没有找到任何数据,我想提供一些替代的搜索建议。

比如说,有人搜索“救护车服务”,但没有找到相关数据。我想建议“救护车”或“服务”作为替代搜索选项,这样可能会根据模型中的数据找到一些结果。

我在网上搜索了django中的建议搜索,找到了Haystack/elastic search等选项,但我不太确定这些是否真的必要,因为我的搜索只是在一个模型中进行。

注意:StackOverflow告诉我我的问题可能会被关闭,因为它有些主观。如果是这样的话,请告诉我该把它移到哪里。谢谢!

2 个回答

1

这只是一个想法,但可能对你有帮助:

  1. 用户输入搜索内容:“救护车服务”

  2. 如果在这个视图中查询没有结果,就用你选择的备用搜索内容,比如“救护车”,重新加载同一个视图,并设置一个标记,表示你正在进行一个推荐搜索。

你需要考虑两件事:

  1. 如果备用搜索也没有结果怎么办?你需要在这里设置一个递归限制。

  2. 我该如何选择备用搜索的数据?嗯,这又是一个完全不同的话题。

这是这个想法的代码示例:

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

1

Haystack 确实是一个很不错的选择,在这里你可以找到如何提供“拼写建议”的方法,你可以在这个OS问题/答案中看到一个例子。

无论你只有一个模型,这个工具都非常棒,安装、设置和使用都很简单,而且非常灵活。

也许这个也会对你有帮助。

撰写回答