Django中备用/建议搜索的最佳选择

时间:2014-07-17 14:40:05

标签: python django

我有一个Django应用程序,它从模型Classified中搜索数据,并使用基于输入术语的简单查询集显示它们。这很有效,我对此方法没有抱怨。

但是,如果有人输入的术语不返回任何数据,我想提供备用/建议搜索的选项。

例如:有人搜索“救护车服务”'它没有返回数据。我想建议“救护车”#39;或者'服务'作为备用搜索选项,可根据模型中存在的数据从模型返回数据。

我用Google搜索了suggested search in django,它给了我干草堆/弹性搜索等选项,由于搜索仅涉及一个模型,因此我不确定是否真的需要。

注意:SO告诉我,我的问题可能会被关闭,因为它是主观的。如果是这样的话,请建议我可以将它移动到哪里。谢谢!

2 个答案:

答案 0 :(得分:1)

Haystack确实是一个很好的选择,here你会发现如何提供'拼写建议',你可以看到一个例子in this OS question/answer

无论您只有一个型号,这个工具都非常棒,安装/设置/使用简单,而且非常灵活。

也许this也有帮助。

答案 1 :(得分:1)

这只是一个想法,但可能适合你:

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

  2. 如果视图中的查询没有返回任何内容,请使用您选择的替代搜索数据重定向到同一视图,让我们说“Ambulance”,以及一个标记值,表示您正在执行建议搜索的视图。< / p>

  3. 您必须考虑两件事:

    1. 如果备用搜索没有返回任何内容怎么办?你必须在这里设置一个递归限制。

    2. 我将如何选择备用搜索的数据?那么,这是另一个关于一个完全不同主题的问题。

    3. 这是代码中的这个想法:

      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