Postgresql:如何为tsquery设置权重

Postgresql:如何为tsquery设置权重,postgresql,full-text-search,Postgresql,Full Text Search,如何为tsquery设置权重?我需要为从plainto\u tsquery获取的tsquery设置权重 可能吗?类似于setweight(plainto_tsquery(“”),'A'),但它只适用于tsvector,我也有这个问题。我的用例是大型文档,有许多部分,我希望提供一个“仅搜索标题文本”选项。(标题的权重为A,分散在整个文档中;其他章节的权重为B、C或D,具体取决于它们出现的位置。) 这里有两个解决方案应该会有所帮助 解决方案1:tsquery的设置权重函数 该函数将tsquery转换

如何为
tsquery
设置权重?我需要为从
plainto\u tsquery
获取的
tsquery
设置权重


可能吗?类似于
setweight(plainto_tsquery(“”),'A')
,但它只适用于
tsvector
,我也有这个问题。我的用例是大型文档,有许多部分,我希望提供一个“仅搜索标题文本”选项。(标题的权重为A,分散在整个文档中;其他章节的权重为B、C或D,具体取决于它们出现的位置。)

这里有两个解决方案应该会有所帮助

解决方案1:tsquery的设置权重函数 该函数将tsquery转换为文本,应用正则表达式设置权重,然后转换回tsquery

CREATE FUNCTION setweight(query tsquery, weights text) RETURNS tsquery AS $$
    SELECT regexp_replace(
                query::text, 
                '(?<=[^ !])'':?(\*?)A?B?C?D?', ''':\1'||weights, 
                'g'
            )::tsquery;
$$ LANGUAGE SQL IMMUTABLE;
无论你需要什么样的重量组合

然后,在搜索时,使用过滤后的表达式。e、 g:

SELECT * 
FROM your_table
WHERE ts_filter(fulltext, '{a}') @@ plainto_tsquery('your query')
搜索应在索引表达式上进行

讨论 解决方案1提供了您正在寻找的函数,但加权查询的问题是,尽管postgres将使用索引查找候选匹配项,但它仍然需要撤回每个文档以检查权重

在我的例子中,当只按标题搜索时,解决方案2似乎提供了更好的性能。标题中的文本(权重A)使用的词汇表比整个文档中的词汇表小得多,因此全文索引比全文索引小得多,匹配后不需要重新检查结果

对于您自己的情况,性能将完全取决于您自己的文档结构和查询的性质,因此请使用“解释分析”进行测试,以选择更好的解决方案。考虑到票的年龄,我想你已经解决了这个问题:-)


注意:
ts_filter()
phraseto_tsquery()
来自Postgres 9.6。

以下是关于Postgres全文搜索的最佳文章:

您还可以通过以下方式设置重量:

setweight(to_tsvector(coalesce($columnName,),“$weight”)

其中列名称类似于
users.name
(table.column)
和您想要的权重,例如A、B或C

我不相信您可以为tsquery设置权重。你的用例是什么?看起来是这样的。但这很奇怪,不是吗?当我们通过to_tsquery('abc:A')创建tsquery时,我们可以为它设置权重,但在plainto_tsquery中我们不能这样做。我在互联网上找不到同样的问题。我的用例很简单。我有一个列包含空格分隔的单词,我想在查询中使用它并为它设置一个标签(权重)。我做错什么了吗?
CREATE INDEX fulltext_idx
    ON your_table USING gin
    (fulltext)

CREATE INDEX fulltext_idx_A
    ON your_table USING gin
    (ts_filter(fulltext, '{a}'))

CREATE INDEX fulltext_idx_AB
    ON your_table USING gin
    (ts_filter(fulltext, '{a,b}'))
SELECT * 
FROM your_table
WHERE ts_filter(fulltext, '{a}') @@ plainto_tsquery('your query')