PostgreSQL全文搜索

PostgreSQL全文搜索,postgresql,full-text-search,Postgresql,Full Text Search,我需要在Postgresql中使用全文搜索,但我找不到使用索引文本字段ts_向量数据类型的ts_查询从表中查找单词列表的方法。ts_query是只能够处理几个字,还是还可以处理来自一个表的多个值 提前感谢你的帮助 如果我正确理解你的要求,让我试着根据对问题的评论来制定一个答案 问题 您正在尝试对tableA表、column indexed_text_field a tsvector类型进行全文搜索,该类型基于作为文本存储在另一个表tableB中名为Word的列中的单词 解决方案 首先,如果您希望

我需要在Postgresql中使用全文搜索,但我找不到使用索引文本字段ts_向量数据类型的ts_查询从表中查找单词列表的方法。ts_query是只能够处理几个字,还是还可以处理来自一个表的多个值


提前感谢你的帮助

如果我正确理解你的要求,让我试着根据对问题的评论来制定一个答案

问题 您正在尝试对tableA表、column indexed_text_field a tsvector类型进行全文搜索,该类型基于作为文本存储在另一个表tableB中名为Word的列中的单词

解决方案 首先,如果您希望在全文搜索期间向PostgreSQL提供多个标记和单个单词,您可以使用两个功能:

询问 普莱托查 在第一个函数中,您需要使用一个与&符号分割每个给定的令牌。第二个函数可以输入任何文本字符串,它将为您将其切碎为标记。更多信息

您的挑战是希望根据另一个表中的单词选择匹配项。这可以通过不同的方式完成,例如通过简单的内部联接:

从表格a、表格b中选择a.*,其中a.indexed_text_field@@to_tsqueryb.words; 或者,如果“单词”列中有多个单词,则最有可能使用plainto_tsquery函数来保持简单:

从表格a、表格b中选择a.*,其中a.indexed\u text\u field@@plainto\u tsqueryb.words; 但是,如果必须使用较低级别的查询版本:

从表格a、表格b中选择一个*,其中a.indexed_text_field@@to_tsqueryreplaceb.words,','&';
在后者中,将单词之间的所有空格替换为和和,从而使它们成为单独的标记。但是,请注意最后一个标记的索引用法,因为您可能需要创建一个关于replace函数用法的表达式索引。

A to\u tsquery可以通过使用&:to\u tsquery'foo&bar&baz'拆分标记来搜索多个标记。因此,您可以从表中检索单词列表,并将它们作为标记提供给“to_tsquery”函数,以符号分隔。然而一些代码示例可能有助于更好地说明您要完成的任务。我正在尝试这样做:从表中选择*以\u tsquery从另一个\u表查询中选择单词,其中table.indexed\u text\u field@@query;我认为你的解决方案会很好,但我不知道如何反馈给_tsquery。根据你的评论,我制定了一个答案。非常感谢你给出的清晰答案,它对我非常有用。现在,我在运行这些代码时遇到了一些性能问题,而indexed_text_Field是一个2300万条记录的表,words是一个140条记录的表,它需要5个多小时才能完成。你认为这是对的吗?不客气。如果答案对你有帮助,请照样接受。关于性能,5个小时对于这次运行来说太长了,如果没有正确查看数据库设置,我的第一个猜测是您的tsvector数据遗漏了数据库索引Gist或Gin。你的数据上有什么类型的索引?我对这两个字段都使用GIST。好吧,下一步是看看计划员在做什么。。。使用EXPLAIN ANALYSE对同一个查询(顺便说一句,该查询花费了5个小时)的输出是什么?您运行了上述哪一个查询?