首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL全文检索和三元词混淆

PostgreSQL全文检索和三元词混淆
EN

Stack Overflow用户
提问于 2013-04-09 00:30:33
回答 1查看 8K关注 0票数 42

我对PostgreSQL、全文搜索和Trigram的整个概念有点困惑。在全文搜索查询中,我使用tsvector,如下所示:

代码语言:javascript
复制
SELECT * FROM articles
WHERE search_vector @@ plainto_tsquery('english', 'cat, bat, rat');

问题是,这种方法不能解决拼写错误的问题。然后我开始阅读关于Trigram and pg_trgm的文章:

通过查看其他示例,似乎使用了trigram或向量,但不能同时使用两者。所以我的问题是:它们曾经一起使用过吗?如果是这样的话,是怎么做的?三元文法取代全文吗?三元模型更准确吗?那么trigrams对性能有什么影响呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-09 01:01:15

它们服务于非常不同的目的。

  • 全文搜索用于返回与词干words.
  • Trigrams的搜索查询匹配的文档,为您提供了一种比较两个字符串并确定它们看起来有多相似的方法。

考虑以下示例:

代码语言:javascript
复制
SELECT 'cat' % 'cats'; --true

上面的结果返回true,因为'cat''cats'非常相似(由pg_trgm限制决定)。

代码语言:javascript
复制
SELECT 'there is a cat with a dog' % 'cats'; --false

上面的代码返回false,因为%在两个完整的字符串之间查找相似的内容,而不是在字符串中查找单词cats

代码语言:javascript
复制
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true

这将返回true,因为tsvector将字符串转换为词干单词列表,并忽略了一堆常用单词(停用单词-如'is‘和'a')...然后搜索cats的词干版本。

听起来你想使用trigrams来auto-correct你的ts_query,但这并不是真的可能(无论如何都不是以任何有效的方式)。他们并不真正知道一个单词是拼写错误的,只是它可能与另一个单词有多相似。它们可以用来搜索词表,试图找到相似的词,允许你实现一个“你的意思是...”键入功能,但是这个单词需要维护一个单独的表,其中包含search字段中使用的所有单词。

如果您希望文本索引匹配一些常见的拼写错误的单词/短语,则可能需要查看Synonym Dictorionaries

票数 62
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15884309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档