模型 IntegerField 上的 Django SearchVector
Django SearchVector on model IntegerField
如果我有一个像这样的简单模型:
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)
如果我有一个像这样的简单模型:
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)