模型IntegerField上的Django SearchVector

时间:2018-11-29 12:25:28

标签: django postgresql full-text-search tsvector

如果我有一个简单的模型,例如:

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

如何在postgres中使用SearchVector来同时搜索标题和年份字段?例如。因此“ Some Book 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 :(得分:1)

当您在错误日志中读取内容时,不能在搜索向量中使用整数,但是可以轻松地cast将整数the documentation放入查询字符串中。

您可以执行此代码,以使用 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)