模型 IntegerField 上的 Django SearchVector

标签 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", '') || ' '...

无论如何我也可以搜索整数字段吗?

最佳答案

正如您在错误日志中所读到的,您不能在搜索向量中使用整数,但您可以轻松地 cast将您的整数转换为查询中的字符串。

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

关于模型 IntegerField 上的 Django SearchVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53539033/

相关文章:

python - 如何删除 Django 中的 X 框架选项 header ?

python - Django 1.11 - 找不到静态文件

postgresql - 如何为nodejs设置 Node 路径(Ubuntu)

r - 将文件从 PostgreSQL 导入到 R

python - 在 GAE 中组合文本搜索和查询过滤器

python - 如何在 Django 中使用模型表单在 commit=False 后保存字段?

django - 从 ORM 加速数据库插入

postgresql - PL/pgSQL - %TYPE 和 ARRAY

Mysql FULLTEXT 使用 GROUP BY 进行搜索,保留得分最高的行值

java - hibernate 搜索不区分大小写的搜索不能正确地与 LowerCaseFilterFactory 配合使用