Python Django中的搜索应用程序

Python Django中的搜索应用程序,python,django,search,sphinx,django-sphinx,Python,Django,Search,Sphinx,Django Sphinx,我正在使用django和sphinx构建搜索应用程序。我让设置工作,但当我搜索我得到无关的结果。以下是我所做的- # this is in my trial_data Model search = SphinxSearch( index = 'trial_data trial_datastemmed', weights = {'name': 100,}, mode = 'SPH

我正在使用django和sphinx构建搜索应用程序。我让设置工作,但当我搜索我得到无关的结果。以下是我所做的-

# this is in my trial_data Model
search     = SphinxSearch(
                index    = 'trial_data trial_datastemmed',
                weights  = {'name': 100,},
                mode     = 'SPH_MATCH_ALL',
                rankmode = 'SPH_RANK_BM25',
                )
当我搜索时,我(从我的试验数据中)得到了这个-

问题是“教父”最相关的结果显示在第19位。所有排名靠前的结果都是垃圾。如何使用Django sphinx对结果进行排序

相反,如何使用此设置使结果更相关

注意:我使用的是python 2.6.x+django 1.2.x+sphinx 0.99+django sphinx 2.3.3+mysql


而且,我定制的数据只有大约100行,只有一个字段
name
searchable。还有一个字段
评级
(这是您在括号中看到的)<代码>评级字段是一个属性(不可搜索)。

据我所知,有两种方法可以做到这一点

首先,排序模式有SPH_sort_RELEVANCE、SPH_sort_ATTR_DESC、SPH_sort_ATTR_ASC、SPH_sort_TIME_SEGMENTS、SPH_sort_EXTENDED。我假设SphinxSearch构造函数中的关键字是
sortmode
,但我找不到文档

search     = SphinxSearch(
                index    = 'trial_data trial_datastemmed',
                weights  = {'name': 100,},
                mode     = 'SPH_MATCH_ALL',
                rankmode = 'SPH_RANK_BM25',
                sortmode = 'SPH_SORT_RELEVANCE', # this was added
                )
其次,您可以在查询时指定排序模式:

res = trial_data.search.query('godfather').order_by('@relevance')

这两个答案都是通过观察得出的猜测。让我们知道它是否对您有效。

由于我只搜索一个字段
名称
,因此
.order\u by('@weight')
在此无效
@weight
如果您从多个字段进行搜索,则有意义。所以回来,我已经试过了。它对我编辑答案的@movieyoda的
结果集
@movieyoda没有任何影响,我根据这些结果将“@weight”更改为“@relevance”。
search     = SphinxSearch(
                index    = 'trial_data trial_datastemmed',
                weights  = {'name': 100,},
                mode     = 'SPH_MATCH_ALL',
                rankmode = 'SPH_RANK_BM25',
                sortmode = 'SPH_SORT_RELEVANCE', # this was added
                )
res = trial_data.search.query('godfather').order_by('@relevance')