Postgres全文搜索字典去掉特殊字符

Postgres full text search dictionary strip special charachters

我正在使用 postgres 全文搜索(除其他外)为用户名和标签提供自动完成功能。但是,我希望自动完成将列值 'dashed-tag-example' 与 ts_query 相匹配,例如 'dashedtag:*'.

我的理解是,要在不复制我的 table 中的列的情况下执行此操作,我需要按照删除“-”等字符的简单字典的方式创建一个字典。是否可以使用 SQL 创建这样的字典(即我可以放入 rails 迁移中的东西)?

似乎应该可以以某种方式定义一个使用 postgres 的正则表达式替换函数的字典(或者我需要一个解析器?),但我似乎无法在网上找到任何关于如何创建字典的示例(解析器?)那样。这可能吗?怎么样?

字典来不及了;您将需要一个不同的解析器,这需要编写 C 代码。

简单实用的解决方案是在构造tsvector时使用replace()去除-

您不需要为此创建新列,只需像这样搜索:

SELECT ... FROM ...
WHERE to_tsvector('english', replace(col, '-', ''))
      @@ to_tsquery('english', replace('search-string', '-' ''));