PostgreSQL:tsvector全文搜索

hrirmatl  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(2)|浏览(278)

我有一个包含100m行的表,我需要全文搜索它,并提供有关如何相似的信息(例如:使用pg_trgm模块)的文本。因为这里的问题是它应该很快。
我尝试了gist和gin索引,有一个额外的列与我的领域的tsvector等。
我的想法是首先使用tsvector进行查询,然后运行pg_trgm模块提供的相似性函数。
我的问题如下。如果我使用一个完整的单词作为查询,它将工作。但如果我附加一些东西就不会了。
这是完全有意义的,因为“A quick brown fox...”的tsvector是"'a':1 'brown':3 'fox':4 'quick':2"
我希望我说清楚了我想达到的目标。

示例:

工作

select to_tsvector('A quick brown fox...') @@ to_tsquery('quick') -- true

不工作

select to_tsvector('A quick brown fox...') @@ to_tsquery('quicks') -- false

有什么想法如何使用postgresql来实现这一点吗?

bis0qfac

bis0qfac1#

您需要设置语言配置参数,如下所示:

select to_tsvector('english', 'A quick brown fox...') @@ to_tsquery('english', 'quicks')

只有当tsquerytsvector具有相同的语言配置时,才能正确识别具有复数和填充的词素。

4xy9mtcn

4xy9mtcn2#

在PostgreSQL中使用tsvector和tsquery执行全文搜索时,实际上可以对tsvector和tsquery使用相同的配置。这可以通过识别配置的值并在整个应用程序中一致地使用它来实现。假设一个表有数百万行,您可以添加一个额外的列来表示tsvector行,其中包含每个tsvector的配置。然后可以使用GIN索引来表示配置。使用@@参数在tsvector列中搜索关键字时,必须指定配置,因为索引配置中不接受默认值。每个tsvector可能具有不同的配置,因此在执行搜索时使用正确的配置很重要。这可以被看作是令牌化与词形化不同,第二个词形化仅在给定两个约束的情况下通过to_tsquery实现,并为tsvector和给定查询设置相同的配置。

相关问题