赞
踩
这篇博文将引导您了解使用PostgreSQL实现足够好的 全文搜索所需的基本部分。
剧透警告:对于那些寻找“好的,只需向我展示一个全文搜索,在 Postgres 中不到 20 行的排名和模糊搜索”的好奇的人,所以你去:
- SELECT
- courses.id,
- courses.title,
- courses.description,
- rank_title,
- rank_description,
- similarity
- FROM
- courses,
- to_tsvector(courses.title || courses.description) document,
- to_tsquery('sales') query,
- NULLIF(ts_rank(to_tsvector(courses.title), query), 0) rank_title,
- NULLIF(ts_rank(to_tsvector(courses.description), query), 0) rank_description,
- SIMILARITY('sales', courses.title || courses.description) similarity
- WHERE query @@ document OR similarity > 0
- ORDER BY rank_title, rank_description, similarity DESC NULLS LAST
但是,如果您需要了解上述 SQL 语句到底在做什么,让我向您解释一下 PostgreSQL 中的上下文和 FTS(全文搜索)基础知识。
很多年前,我读过这篇很棒的博文,名为“Postgres 全文搜索足够好”。真的很值得一读,我可以得到很多见解,因为我已经使用 PostgreSQL 作为我的标准数据库。
到那时,我已经习惯了使用 ElasticSearch 进行文本搜索(如果我们在此之前回到 2009 年,我就有使用 ElasticSearch 所基于的 Apache Lucene 的经验)。
但是,管理 ElasticSearch 部署并不容易。这需要很大的耐心和记忆力
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。