【问题标题】:Is there a way to generate SearchVector field content on runtime?有没有办法在运行时生成 SearchVector 字段内容?
【发布时间】:2020-11-05 02:28:26
【问题描述】:

模型有一个 SearchVector 字段和一个 CharField 内容字段。

class AModel(models.Model):
    content = models.CharField(...)
    vector = SearchVectorField()

content 字段更改时,vector 字段将通过以下查询更新:

AModel.objects.filter(id=xx).update(vector=SearchVector('content'))

如果我获取vector 字段并查找它,该字段的内容如下所示:

"'2':38 '3':32 '4':26 '5':20 'bskl':14,19,25,31,37 'ck':2 'clb':13,18,24,30,36 '俱乐部':4 'f':1 'fck':11,16,22,28,34 'clb-bskl':10,15,21,27,33 'kargo':9 'pv':12,17,23,29,35 'trt':6 'tsrt':7"

我想在 python/django 中生成这些数据而不从 db 中读取 vector 字段。

我查看了 SearchVector 类,但不知道它是如何实现的。

【问题讨论】:

  • 目前还不清楚您想要实现什么,您能否进一步详细说明。您希望 SearchVector 在数据库级别自动更新自身吗?
  • 我对我想要的行的内容进行了更具体的更改

标签: django postgresql vector full-text-search


【解决方案1】:

我不确定您所说的“在运行时”是什么意思,但如果您指的是使用 Django 获取搜索向量本身,您将不得不

from django.db import connection

content = 'hello world'

with connection.cursor() as cursor:
    cursor.execute('SELECT * FROM to_tsvector(%s)', [content])
    ts_vec = cursor.fetchone()[0]

print(ts_vec)

那会输出

'hello':1 'world':2

【讨论】:

  • 是的,我想生成数据而不对相关字段进行任何更改/读取操作。所以,你说,无论如何我都必须运行一个查询。但是这个查询只会给出我想要的而不触及该字段。
猜你喜欢
  • 2012-05-31
  • 2015-02-20
  • 1970-01-01
  • 2017-01-29
  • 2021-09-30
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
相关资源
最近更新 更多