【问题标题】:Postgresql: tsvector full text searchPostgresql:tsvector全文搜索
【发布时间】:2018-03-24 06:21:14
【问题描述】:

我有一个包含 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 实现这一点的任何想法?

【问题讨论】:

  • 那是什么版本的 Postgres?第二个查询在 9.6.2 上给了我真实的信息编辑:哦,在 9.6.5 上检查过,确实如您所描述的那样工作。
  • @ŁukaszKamiński 这取决于字典。如果我在 to_tsquery 中明确使用“简单”字典,则默认情况下我使用“english”字典得到 true,否则返回 false。我认为这是由于词干提取,它会删除 s,但不会只删除末尾的任意字符。
  • @ŁukaszKamiński 我得到了 PostgreSQL 9.6.2
  • @MadScientist 确实如此。我尝试了to_tsquery('english', 'quicks') 并得到了真实的结果。

标签: postgresql


【解决方案1】:

你需要设置语言配置参数,像这样:

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

只有当tsquerytsvector 具有相同的语言配置时,才能正确识别词位、复数和东西。

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2014-11-04
    • 1970-01-01
    相关资源
    最近更新 更多