【问题标题】:Postgres - difference between to_tsquery, to_tsvector and plainto_tsqueryPostgres - to_tsquery、to_tsvector 和 plainto_tsquery 之间的区别
【发布时间】:2020-02-13 00:51:57
【问题描述】:

postgres 的全文搜索包括以下一些搜索功能:plainto_tsquery、to_tsquery 和 to_tsvector。 我不明白它之间的区别,结果总是包含相同的单词,但在 tsvector 中它与该单词的位置数分离。

SELECT plainto_tsquery('simple', 'The & Fat & Rats');

结果将是这样的: plainto_tsquery: '胖' & '老鼠' to_tsquery:“胖”和“老鼠” to_tsvector: '胖':2 '老鼠':3

我尝试过更长的查询,但没有发现比这更大的差异。

我已经阅读了文档,但我也没有从中得到区别。

我很高兴得到任何帮助。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    "plainto_tsquery" 采用简单的英语短语(或者在这种情况下是简单的“简单” - 尽管您的问题不一致。“简单”不会像您显示的那样去除单词“the”,除非您对其进行了非标准修改)并将其转换为 tsquery。由于“&”是标点符号,它会被忽略。但随后它在单词之间添加了“&”,因为这就是“plainto_tsquery”所做的。所以这些更改是不可见的,因为您选择了一个糟糕的示例来提供给 plainto_tsquery。

    "to_tsquery" 将您提供的查询编译成用于搜索的结构。但是,由于您是在选择它而不是将其与 ts 查询运算符一起使用,因此它会再次将其转换回文本以便显示它。它要求您输入的内容看起来很像 tsquery(例如,每个单词之间都有布尔运算符),否则会引发错误。当您尝试更长的查询时,您肯定注意到了吗?

    "to_tsvector" 创建一个 tsvector。这不是 tsquery,而是 tsquery 应用到的。

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2021-12-25
      相关资源
      最近更新 更多