它们的用途非常不同。
- 全文搜索用于返回匹配词干搜索查询的文档。
- 三元组为您提供了一种比较两个字符串并确定它们看起来有多相似的方法。
考虑以下示例:
SELECT 'cat' % 'cats'; --true
以上返回 true 因为与(由 pg_trgm 限制规定)'cat'
非常相似。'cats'
SELECT 'there is a cat with a dog' % 'cats'; --false
上面的返回是false
因为%
在两个完整的字符串之间寻找相似的,而不是在字符串中寻找cats
单词。
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
这会返回true
,因为 tsvector 将字符串转换为词干列表并忽略了一堆常用词(停用词 - 像 'is' 和 'a')... 然后搜索cats
.
听起来您想使用三元组来自动更正您的ts_query
,但这实际上是不可能的(无论如何都不是以任何有效的方式)。他们真的不知道一个词拼错了,也不知道它与另一个词有多相似。它们可用于搜索单词表以尝试查找相似的单词,从而允许您实现“您的意思是……”类型的功能,但该单词需要维护一个单独的表,其中包含您的search
字段中使用的所有单词。
如果您希望文本索引匹配一些常见的拼写错误的单词/短语,您可能需要查看Synonym Dictorionaries