Django中的搜索应用
我正在用 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',
)
当我搜索时,得到的结果是这样的(来自我的测试数据) -
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位。前面的结果都是一些无关紧要的内容。我该如何用 Django-sphinx
来 排序
或 排列
我的结果呢?
或者,我能做些什么来让这些结果更相关呢?
注意:我使用的是 python 2.6.x + django 1.2.x + sphinx 0.99 + django-sphinx 2.3.3 + mysql
另外,我的数据是我自己制作的,只有大约100行,且只有一个字段 name
是可以搜索的。还有一个字段 rating
(就是你在括号里看到的)。rating
字段是一个属性(不可搜索)。
1 个回答
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/ 的内容猜测出来的。如果你试过了,记得告诉我们效果如何。