Как указать содержимое 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 за ответ.