2010-08-20 1 views
5

Я использую Django фильтр запроса __search для выполнения полнотекстового поиска Е.Г.Джанго полный порядок поиска текста по релевантности

MyModel.objects.filter(title__search = 'some title') 

Как я могу получить его на заказ по релевантности, как в настоящее время это, кажется, заказав по алфавиту ?

В частности, мне хотелось бы найти результаты поиска, где заголовок был some title, чтобы появиться первым перед тем, что имело заголовок a different but contains some title.

редактировать:

То, что я заметил, что по определению модели для MyModel у меня есть:

class Meta: 
    ordering = ['title'] 

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

+1

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

+1

Я буду отзываться на комментарий Энрико: учитывая, что вы приняли это решение, похоже, вы по-прежнему недооцениваете, что ваши результаты действительно упорядочены по релевантности, если вы удалите порядок заголовков. Это не тот случай: нет никакого отношения к заказу, вы получаете их в любом порядке, который база данных выбирает, чтобы предоставить вам. –

ответ

0

Попытка: Model.objects.all().order_by().search() - вызов order_by without any parameters does no ordering at all.

Помимо этого: я буду рекомендовать Carl's Haystack, особенно потому, что это позволяет более сложные вещи, такие как stemming («dance» будет соответствовать «танцам», «танцорам» и «танцам»), огранке («Show me пользователь & количество просмотров для каждого результата поиска "), получение объектов, которые похожи на ту, которую вы сейчас показываете, и т. д. Когда я последний раз пробовал Whoosh, он был неустойчивым (т. е. разбился во время индексации), но потребовался довольно короткий период время, чтобы запустить Solr, что здорово.

+0

Мне очень повезло с Whoosh в последнее время. Но это не делает все причудливые вещи: да, да, огранка нет :( –

+0

Я должен отметить, что мой опыт Whoosh был краток и год назад. Я слышал, что он стабилизировался с тех пор, но на самом деле он не нужен, поскольку мы уже нужен Solr по разным причинам (огранение, поддержка многих языков). –

3

Как заметил here, поиск Boolean.

Нет такого релевантности коэффициент, который необходимо использовать для заказа.

A stupid Идея может быть заказана по названию длиной, что может иметь смысл.

2

Самый простой способ получить хороший поиск полнотекстовый в проекте Django является использование отличное Haystack приложение. Это смешно легко настроить, особенно если вы используете простейший бэкэнд поисковой системы (Whoosh, который является чистым Python). Вы можете настроить полнотекстовое индексирование вашего контента, с учетом релевантности результатов и множеством других приятных функций, кроме того, за считанные минуты. И если вы перерастаете ограничения производительности/параллелизма/функции Whoosh, так как вы используете Haystack для абстрактного поиска, вы можете обменять что-то вроде Solr на Whoosh в любое время.

0

Вы можете добиться этого, используя необработанный поиск с предложением ORDER BY для релевантности при использовании Django> = 1.2

File.objects.raw(query_string, params[x,y,z]) 

Хотя raw_querset имеет свои недостатки на данный момент, например, не поддерживает count().

Это, однако вернуть модели так довольно проста в использовании, хотя и не так просто, как __search

 Смежные вопросы

  • Нет связанных вопросов^_^