Приложение для поиска в 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-й позиции. Все лучшие результаты - мусор. Как я могу order или sort получить результаты, используя Django-sphinx.

Скорее, что я могу сделать, чтобы сделать результаты более релевантными, используя эту настройку.

ПРИМЕЧАНИЕ. Я использую python 2.6.x + django 1.2.x + sphinx 0.99 + django-sphinx 2.3.3 + mysql

Кроме того, данные, которые я сделал на заказ, составляют всего около 100 строк, и только одно поле name доступно для поиска. Есть еще одно поле rating (то, что вы видите в скобках). Поле rating является атрибутом (не доступным для поиска).


person Srikar Appalaraju    schedule 27.10.2010    source источник


Ответы (1)


Насколько я могу судить, есть два способа сделать это.

Во-первых, есть режимы сортировки 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/. Дайте нам знать, если это сработало для вас.

person Steven Rumbalski    schedule 27.10.2010
comment
.order_by('@weight') здесь не действует, так как я ищу только с одним полем name. @weight имеет смысл, если вы ищете более чем в одном поле. Итак, вернувшись, я попробовал это. Это не влияет на result_set. - person Srikar Appalaraju; 27.10.2010
comment
@movieyoda Я отредактировал свой ответ, изменив «@weight» на «@relevance» на основе davidcramer.net/code/79/in-depth-django-sphinx-tutorial.html. - person Steven Rumbalski; 28.10.2010