Использование полнотекстового поиска Postgresql в Django для сопоставления фраз - PullRequest
0 голосов
/ 25 марта 2019

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

Например, у меня есть модель:

from django.contrib.postgres.indexes import GinIndex
from django.contrib.postgres.search import SearchVectorField
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    search_document = SearchVectorField(null=True)

    class Meta:
        indexes = [
            GinIndex(fields=['search_document'])
        ]

И я сделал это:

from django.contrib.postgres.search import SearchVector

Article.objects.update(
    search_document=(
        SearchVector('title', weight='A') \
        + SearchVector('body', weight='B')
    )
)

Но, если я найду:

"вкусные яблоки" рыба

как это:

from django.contrib.postgres.search import SearchQuery

qs = Article(
        search_document=SearchQuery('"tasty apples" fish'))

тогда результаты будут такими же, как если бы я искал:

вкусные яблочные рыбки

т.е. статьи, которые содержат эти три слова, а не статьи, которые содержат фразу "вкусные яблоки" и слово "рыба".

Можно ли искать подобные фразы?

1 Ответ

0 голосов
/ 25 марта 2019

В новом выпуске Django 2.2 будет тип поиска "фраза" .Вы можете посмотреть, как генерируется SQL в Django 2.2 SearchQuery class и перенести его в свою версию Django, если вы не сможете обновить его в ближайшее время.

Списокфункции для текстового поиска доступны в документации Postgresql .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...