现在我正在使用 ts_rank (带有 ts_vector 和 ts_query)来搜索字符串的相关性。虽然到目前为止这对我来说做得很好。我希望在搜索过程中进行一些模糊的工作。
按照目前的情况,搜索是由用户输入其术语作为字符串来完成的,然后我将其解析为标记。然后将这些标记与字符串进行比较。我想做的是在这些查询中使用类似于 levenshtein 的东西,以允许也匹配较小的拼写错误。
例如,如果用户输入 rubico 而不是 rubicon,我仍然会得到匹配项(因为 rubico 与 rubicon 的距离仅为 1)。
这是否可能与 Postgres 的 ts_rank 功能有关,或者是否有其他选项允许文本搜索与 levenstheins 一起使用?
我最近不得不使用命令将数据库结构从一个数据库复制到另一个数据库
pg_dump -c -S database_name > pg_dump_date.sql
Run Code Online (Sandbox Code Playgroud)
然后我在新数据库上运行转储文件
psql < pg_dump_date.sql
Run Code Online (Sandbox Code Playgroud)
并且重新创建了我的模式,并安装了我的扩展。
检查已安装的扩展后,我可以看到 hstore 已安装,但是当我尝试 hstore 的基本运算符时,例如
SELECT id FROM schema_name.table_name WHERE hstore_column->'hstore_key'::TEXT = 'hstore_value'
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
operator does not exist: schema_name.hstore -> text
Run Code Online (Sandbox Code Playgroud)
如果我不尝试投射密钥,我会收到类似的错误
operator does not exist: schema_name.hstore -> unkown
Run Code Online (Sandbox Code Playgroud)
我的第一直觉是简单地删除 hstore 扩展并重新安装它,但这样做也会删除我对 hstore 类型的众多用户函数、触发器和其他依赖项。
除了对 hstore 扩展进行级联删除之外,有没有办法解决这个错误?我正在使用 postgresql 9.3 服务器。
目前我有一个 hstore 来描述各种项目的属性。搜索时,我需要删除每个项目唯一的值(例如序列号、vin 等)。根据 postgresql 文档,我应该能够使用以下运算符从 hstore 中删除密钥
根据 postgres 文档
hstore - text delete key from left operand 'a=>1, b=>2, c=>3'::hstore - 'b'::text
在我的代码中,我有
IF item.details ? 'vin' THEN
item.details::hstore - 'vin'::TEXT;
END IF;
当我去创建函数时,我收到语法错误
'“::”处或附近的语法错误'
当我从值的末尾删除类型声明时,我收到错误
'“-”处或附近的语法错误'
据我所知,这符合 postgres 文档所说的操作员应该在http://www.postgresql.org/docs/9.3/static/hstore.html 上工作的方式。有什么我想念的吗?