我需要使用Postgresql进行全文搜索,但我找不到从表格(使用ts_query
)查找索引文本字段({{1})的单词列表的方法} 数据类型)。 ts_vector
只能处理几个单词,还是可以处理来自表格的多个值?
提前感谢您的帮助。
答案 0 :(得分:1)
让我尝试根据问题的评论(如果我理解你的要求正确)来制定答案。
您正尝试在tableA
,列indexed_text_field
(tsvector
类型)上根据在另一个中存储为text
的字词进行全文搜索表tableB
中的表words
。
首先,如果您希望在全文搜索期间提供PostgreSQL多个令牌(单个单词),您可以使用两种功能:
在第一个函数中,您需要使用&符号(&)拆分每个给定的标记。第二个函数可以输入任何文本字符串,它会将它切换为令牌。更多信息here。
您的挑战是您希望根据另一个表格中的字词选择匹配项。这可以通过不同的方式完成,例如通过简单的(INNER)JOIN:
SELECT a.* FROM tableA a, tableB b WHERE a.indexed_text_field @@ to_tsquery(b.words);
如果words
列中有多个字词,您最有可能使用plainto_tsquery()
函数来简化:
SELECT a.* FROM tableA a, tableB b WHERE a.indexed_text_field @@ plainto_tsquery(b.words);
然而,如果您必须使用更低级别的to_tsquery()
版本:
SELECT a.* FROM tableA a, tableB b WHERE a.indexed_text_field @@ to_tsquery(replace(b.words, ' ', '&'));
在后者中,用&符号替换单词之间的所有空格,从而使它们成为单独的标记。请注意最后一个上的索引用法,因为您可能需要为replace()
函数的使用创建表达式索引。