Поиск приложения в Джанго - PullRequest
1 голос
/ 27 октября 2010

Я создаю поисковое приложение, используя 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 поле является атрибутом (без возможности поиска).

1 Ответ

2 голосов
/ 27 октября 2010

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

Во-первых, существуют режимы сортировки SPH_SORT_RELEVANCE, SPH_SORT_ATTR_DESC, SPH_SORT_ATTR_ASC, SPH_SORT_TIME_SEGMENTS, SPH_SORT_EXTEND.Я предполагаю, что ключевое слово в конструкторе 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/. Дайте нам знать, сработало ли это для вас.

...