Как указать содержимое SearchVector вручную в Django for Postgres?

Django поддерживает полнотекстовый поиск в Postgres с помощью SearchVectorField. Данные должны быть подготовлены с помощью to_tsvector на стороне Postgres, что делается функцией SearchVector в Django:

class SomeSearchableModel(PostgresModel):
    searchable = SearchVectorField()

Мне нужно заполнить этот столбец данными, не хранящимися в других столбцах таблицы. По умолчанию можно поступить следующим образом:

class SomeSearchableModel(PostgresModel):
    text = TextField()
    searchable = SearchVectorField()

При каждом сохранении:

    obj.searchable=SearchVector('text') # Column name to be read

Это приложение не хранит данные для поиска в пригодном для использования формате в базе данных. Содержимое подготавливается в каком-то бэкенд-скрипте.

Как мне предоставить SearchVectorField контент вручную?

Нравится:

    obj.searchable=SearchVector(some_processed_text)

Часть запроса PostgreSQL будет иметь вид: INSERT INTO ... SET searchable=to_tsvector(...).

Вычисление содержимого в Postgres - не вариант.

Я думаю, что вы просто используете поиск.

Взято из - https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/search/#the-search-lookup

Entry.objects.filter(body_text__search='Cheese')

Аргументами SearchVector может быть любое выражение или имя поля. Несколько аргументов будут сгруппированы вместе через пробел, чтобы документ поиска включал их все.  SearchVector(Value('some text'))

Спасибо Swen за ответ.

Вернуться на верх