在Django中搜索应用程序

时间:2010-10-27 19:29:21

标签: python django search sphinx django-sphinx

我正在使用django& amp;狮身人面像。我得到了设置工作,但当我搜索时,我得到了无关的结果。这是我做的 -

# 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',
                )

当我搜索时,我得到了这个(来自我的试用数据) -

from trial.models import *
res = trial_data.search.query('godfather')
for i in res: print i
3 Godfathers (7.000000)
Bonanno: A Godfather's Story (1999) (6.400000)
Disco Godfather (4.300000)
Godfather (6.100000)
Godfather: The Legend Continues (0.000000)
Herschell Gordon Lewis: The Godfather of Gore (2010) (6.900000)
Mafia: Farewell to the Godfather (0.000000)
Mumbai Godfather (2.600000)
Russian Godfathers (2005) (7.000000)
Stan Tracey: The Godfather of British Jazz (2003) (6.200000)
The Black Godfather (3.500000)
The Burglar's Godfather (0.000000)
The Fairy Godfather (0.000000)
The Fairy Godfather (0.000000)
The Godfather (9.200000)
The Godfather (1991) (6.400000)

问题是“教父”最相关的结果显示在第19位。所有最重要的结果都是垃圾。我如何使用order sortDjango-sphinx我的搜索结果。

相反,我该怎么做才能使用此设置使结果更具相关性。

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

此外,我定制的数据&只有大约100行,只有一个字段name可搜索。还有一个字段rating(您在括号中看到的字段)。 rating字段是一个属性(不可搜索)。

1 个答案:

答案 0 :(得分:2)

据我所知,有两种方法可以解决这个问题。

首先,有排序模式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')

这两个答案都是来自http://djangosnippets.org/snippets/231/的猜测。如果它适合您,请告诉我们。