如何查询指定tsvector对应的全文检索配置语言?
查询tsvector对应的全文检索配置语言
首先要明确:tsvector类型本身并不存储生成它时所用的全文检索配置信息。tsvector只是文本经过指定配置分词、处理后的词向量结果,不会保留配置元数据。
如果需要关联对应的配置,可按以下方式处理:
1. 提前记录配置(推荐方案)
如果是通过to_tsvector生成tsvector,建议在生成时同步记录所用的配置名称,比如在表中新增字段存储:
-- 创建表时同时记录配置 CREATE TABLE docs ( id SERIAL PRIMARY KEY, content TEXT, content_tsv TSVECTOR, tsv_config TEXT DEFAULT 'english' -- 存储生成tsvector时用的配置 ); -- 插入数据时指定配置并记录 INSERT INTO docs (content, content_tsv, tsv_config) VALUES ('PostgreSQL full text search', to_tsvector('english', 'PostgreSQL full text search'), 'english'); -- 查询时直接读取配置 SELECT tsv_config FROM docs WHERE id = 1;
2. 对已存在的tsvector间接判断
如果是已有的tsvector,无法直接反推配置,但可以通过对比测试来确定:
- 先列出系统中所有可用的全文检索配置:
SELECT cfgname FROM pg_ts_config;
- 用目标文本(如果能获取到原始文本)分别用不同配置生成tsvector,和目标tsvector对比匹配:
-- 假设原始文本是'Hello world',目标tsvector是'tsvector'字段值 SELECT cfgname FROM pg_ts_config WHERE to_tsvector(cfgname, 'Hello world') = (SELECT content_tsv FROM docs WHERE id = 1);
- 如果无法获取原始文本,只能通过分析tsvector中的词干,结合不同配置的分词规则来推测(比如英文配置会去掉停用词、进行词干提取,中文配置的分词结果会不同)。
内容的提问来源于stack exchange,提问作者ariestern
相关产品推荐
相关产品推荐

