Postgresql полнотекстовый поисковый запрос к Django ORM - PullRequest
3 голосов
/ 13 августа 2010

Я следовал документации на FullTextSearch в postgresql.Я создал столбец tsvector и добавил необходимую информацию, и, наконец, я создал индекс.Теперь, чтобы выполнить поиск, я должен выполнить запрос, подобный этому

SELECT *, ts_rank_cd(textsearchable_index_col, query) AS rank
FROM client, plainto_tsquery('famille age') query
WHERE textsearchable_index_col @@ query
ORDER BY rank DESC LIMIT 10;

Я хочу иметь возможность выполнить это с помощью ORM Джанго, чтобы я мог получить объекты.(Небольшой вопрос здесь: мне нужно добавить столбец tsvector к моей модели?) Я предполагаю, что я должен использовать extra (), чтобы изменить «где» и «таблицы» в наборе запросов

Может быть, еслиЯ изменил запрос на это, было бы проще:

SELECT * FROM client
WHERE plainto_tsquery('famille age') @@ textsearchable_index_col
ORDER BY ts_rank_cd(textsearchable_index_col, plainto_tsquery(text_search)) DESC LIMIT 10

, поэтому id 'должен сделать что-то вроде:

Client.objects.???.extra(where=[???])

Thxs за вашу помощь :) Еще одна вещь, ям с использованием Django 1.1

1 Ответ

3 голосов
/ 13 августа 2010

Предостережение: я пишу это на шатком поезде с headcold, но это должно сделать свое дело:

where_statement = """plainto_tsquery('%s') @@ textsearchable_index_col 
                     ORDER BY ts_rank_cd(textsearchable_index_col, 
                                         plainto_tsquery(%s)) 
                     DESC LIMIT 10"""

qs = Client.objects.extra(where=[where_statement], 
                          params=['famille age', 'famille age'])

Если бы вы были на Django 1.2, вы могли бы просто позвонить:

Client.objects.raw("""
SELECT *, ts_rank_cd(textsearchable_index_col, query) AS rank
FROM client, plainto_tsquery('famille age') query
WHERE textsearchable_index_col @@ query
ORDER BY rank DESC LIMIT 10;""")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...