Django SearchQuery и SearchRank не находят результатов при совпадении 1 слова в запросе из 2 слов
У меня есть список статей, и я хочу выполнить поиск, используя функции PostgreSQL SearchQuery и SearchRank. Вот псевдокод:
from django.contrib.postgres.search import SearchVector, SearchQuery, SearchRank
from .models import Article
vector = SearchVector('title', weight='A')
query = SearchQuery(value)
results = Article.objects.annotate(rank=SearchRank(vector, query, cover_density=True).order_by('-rank')
for r in results:
print(r.rank, r.name)
Например, если я ищу только "компьютер", вот что я получу:
1 The most powerful computer in the world
0 This man built a plane for his family in his garden
0 Dogs can sense earthquakes before they happen
Как видите, все работает, как и ожидалось, статья, содержащая в заголовке слово "компьютер", получает ранг 1.
Но теперь, если я буду искать что-то с двумя словами "быстрый компьютер", все результаты покажут ранг 0.
0 Dogs can sense earthquakes before they happen
0 The most powerful computer in the world
0 This man built a plane for his family in his garden
Согласно документации "SearchQuery":
Если search_type - 'plain', что является значением по умолчанию, термины рассматриваются как отдельные ключевые слова
.
Почему до сих пор не подобрана статья с "компьютером" в заголовке?
Я также попробовал без использования "cover_density=True" и получил похожие результаты.
Как сделать так, чтобы результаты все еще соответствовали моему поисковому запросу, даже если совпадает только слово?
Видели ли вы эту часть документации? Вы пробовали это сделать?
https://docs.djangoproject.com/en/4.1/ref/contrib/postgres/search/#searchquery
Так что, возможно, вы можете сделать:
query = (SearchQuery('fast') | SearchQuery('computer'))