Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用ts_向量列进行文本搜索_Sql_Postgresql_Indexing_Tsvector - Fatal编程技术网

Sql 使用ts_向量列进行文本搜索

Sql 使用ts_向量列进行文本搜索,sql,postgresql,indexing,tsvector,Sql,Postgresql,Indexing,Tsvector,很难找到关于这个ts_vector的信息,但是为了加快地址搜索,地址列上的简单索引并不能给出令人满意的结果 为了避免这个限制,我尝试将ts\u向量用于以下查询: alter table mytable add tsv ts_vector; update mytable set tsv = to_tsvector(address); 我非常不熟悉这个ts\u vector列,但是如果我创建了一个btree索引(或任何其他索引),而不是查询address列来查询ts\u vector列,它会加快

很难找到关于这个
ts_vector
的信息,但是为了加快地址搜索,地址列上的简单索引并不能给出令人满意的结果

为了避免这个限制,我尝试将
ts\u向量
用于以下查询:

alter table mytable add tsv ts_vector;

update mytable set tsv = to_tsvector(address);

我非常不熟悉这个
ts\u vector
列,但是如果我创建了一个btree索引(或任何其他索引),而不是查询address列来查询
ts\u vector
列,它会加快速度吗?

是的,但它必须是一个GIN索引:

CREATE INDEX ON mytable USING gin (tsv);
您不需要添加额外的列,还可以执行以下操作:

CREATE INDEX ON mytable USING gin (to_tsvector('english', address));

这样的索引可以与
@
操作符一起使用。

如果创建了额外的列,不是会更快吗?不,这只会浪费一些空间。哦,等等!我刚刚尝试了一下,得到了这个SQL错误[42P17]:错误:索引表达式中的函数必须标记为ImmutableCorry。我已经更改了答案,使函数不可变。如果您在同一个表中搜索多个列,该怎么办?每个表需要一个索引还是所有表都需要一个索引?