Джанго SearchVector на модель IntegerField - PullRequest
0 голосов
/ 29 ноября 2018

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

class Book(models.Model):
    title = models.TextField()
    year = models.IntegerField()

Как я могу использовать SearchVector в postgres для поиска по полям заголовка и года?Например, «Некоторая Книга 2018» будет запрашивать поля заголовка и года.

Если я попытаюсь сделать это следующим образом:

q = SearchQuery('Some') & SearchQuery('Book') & SearchQuery('2018')
vector = SearchVector('title') + SearchVector('year')
Book.objects.annotate(search=vector).filter(search=q)

Тогда я нажму ошибку

DataError: invalid input syntax for integer: ""
LINE 1: ...|| to_tsvector(COALESCE("book_book"."year", '') || ' '...

Можно ли в любом случае искать поле Integer?

1 Ответ

0 голосов
/ 30 ноября 2018

Когда вы читаете в журнале ошибок, вы не можете использовать целое число в векторе поиска, но вы можете легко привести ваше целое число в строку в вашем запросе.

Вы можете выполнить этот кодсделать полнотекстовый поиск с помощью Book модели:

from django.contrib.postgres.search import SearchQuery, SearchVector
from django.db.models.functions import Cast
from django.db.models import CharField

q = SearchQuery('Some') & SearchQuery('Book') & SearchQuery('2018')

vector = SearchVector('headline') + SearchVector(Cast('rating', CharField()))

Book.objects.annotate(search=vector).filter(search=q)
...