sql - 在 PostgreSQL 中搜索单词相似度?
问题描述
可以说在PostgreSQL
数据库中我有一个名为questions
. 正如您在该表中看到的那样,我有与人类相似但与数据库不相似的记录。是否可以获取类似于问题列表 90% 的所有记录?
| QUESTION_ID | QUESTION_TEXT |
|-------------|--------------------------------------------------|
| 1 | What is your favorite movie, cartoon and series? |
| 2 | What is your favorite movie cartoon and series |
| 3 | what is your favorite Movie, Cartoon and Series |
| 4 | Do you like apple? |
| 5 | do you like Apple |
现在我使用只返回 2 条记录的下一个代码:
select
*
from
questions
where
question_text in (
'What is your favorite movie, cartoon and series?',
'Do you like apple?'
)
据我所知,PostgreSQL 有pg_trgm
帮助按功能搜索相似性的模块word_similarity
。如何正确将此功能添加到我的请求中?
解决方案
你会这样做:
CREATE EXTENSION pg_trgm;
CREATE INDEX ON questions USING gin (question_text gin_trgm_ops).
然后你可以像这样有效地搜索:
SELECT question_id
FROM questions
WHERE question_text % 'What is your favorite movie, cartoon and series?';
%
是“相似算子”,可以通过参数 来设置认为事物相似时的阈值pg_trgm.similarity_threshold
。
有关更多信息,请参阅文档。
推荐阅读
- c# - 显示验证错误的工具提示适用于绑定到 POCO 的 TextBlock,但不适用于 POCO 中的 Property。为什么?
- c# - 如何在网格单元格中为项目设置动画?
- python - python - 如何附加到字典名称是变量的字典
- sql-server - 链接表在Access前端、SQL后端是如何工作的?
- wordpress - WordPress 帖子可以显示其他自定义帖子吗?
- javascript - 画布动画 / reactjs / 带有 requestAnimationFrame
- r - 在 R 中启动包“导出”时,此错误是什么意思?
- java - 当我正在读取的文件存在时,Java 程序给了我 FileNotFoundException,但如果我处理异常,则工作得很好
- java - 将 Oracle Java 存储过程连接到 MySQL
- keycloak - 从 Nodejs 访问 Keycloak 组属性