具有pg_trgm的Postgres中的相似性函数

Ale*_*nor 17 sql postgresql fuzzy-search

我正在尝试使用Postgres中的相似度函数来进行模糊文本匹配,但每当我尝试使用它时,我都会收到错误:

function similarity(character varying, unknown) does not exist
Run Code Online (Sandbox Code Playgroud)

如果我向文本添加显式强制转换,我会收到错误:

function similarity(text, text) does not exist
Run Code Online (Sandbox Code Playgroud)

我的查询是:

SELECT (similarity("table"."field"::text, %s::text)) AS "similarity", "table".* FROM "table" WHERE similarity > .5 ORDER BY "similarity" DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)

我是否需要做一些事情才能将pg_trgm初始化?

mor*_*rja 48

使用postgresql 9.1:

安装后(在ubuntu上),sudo apt-get install postgresql-contrib因为tomaszbak回答.

你只需要执行sql命令:

CREATE EXTENSION pg_trgm;
Run Code Online (Sandbox Code Playgroud)

  • 可能值得记住的是,取决于数据库 search_path 扩展可以安装在与 public 不同的架构中。 (2认同)
  • 注意:由于您必须是超级用户,请转到命令行并选择您的数据库 **psql --username postgres --dbname database** 并在那里运行命令。仅在默认数据库中不适用于您的生产应用程序 (2认同)

Tob*_*obu 9

你必须安装pg_trgm.在debian中,源码这个sql : /usr/share/postgresql/8.4/contrib/pg_trgm.sql. 从命令行:

psql -f /usr/share/postgresql/8.4/contrib/pg_trgm.sql
Run Code Online (Sandbox Code Playgroud)

或者在psql shell中:

\i /usr/share/postgresql/8.4/contrib/pg_trgm.sql
Run Code Online (Sandbox Code Playgroud)

该脚本默认安装在公共模式中,如果要将其安装在其他位置,则编辑顶部的搜索路径(以便可以通过删除模式来完成卸载/升级).


tom*_*bak 7

在ubuntu上你需要运行

sudo apt-get install postgresql-contrib
Run Code Online (Sandbox Code Playgroud)

获取/usr/share/postgresql/8.4/contrib/pg_trgm.sql


Kol*_*nya 5

如果您pg_trgm安装的扩展不在架构中,则在使用如下函数public时必须显式指定架构similarity

select schema.similarity(foo,bar) from schema.baz
Run Code Online (Sandbox Code Playgroud)