【发布时间】:2020-03-22 12:45:36
【问题描述】:
我有一个表中的标题和描述列表,它们在 tsvector 列中被索引。如何在 Postgres 中为这些字段实现类似 Google 搜索的全文搜索功能。我尝试了标准 Postgres 提供的各种功能,例如
to_tsquery('apple | orange') -- apple | orange
只要该函数具有这些术语之一,它就会返回行,因此它不会在顶部产生高度相关的结果,而顶部应该同时具有这两个术语。
plainto_tsquery('apple orange') -- apple & orange
此函数需要查询中的所有术语。但我希望首先得到同时包含 apple 和 orange 的结果,但仍然可以在稍后的结果中得到包含这些术语之一的结果。
phraseto_tsquery('apple orange') -- apple <> orange
此函数仅匹配 orange 后跟 apple,反之则不匹配。但对我来说,橙苹果也很重要。
我也尝试过websearch_to_tsquery(),但它的行为与上述功能非常相似。
如何让 Postgres 首先列出高度相关的行,其中包含搜索查询中的大部分术语,无论术语的顺序如何,然后再列出术语数量较少的行?
【问题讨论】:
标签: postgresql search full-text-search