0

我正在使用 postgres 全文搜索(以及其他内容)为用户名和标签提供自动完成功能。但是,我希望自动完成将列值“dashed-tag-example”与“dashedtag:*”之类的 ts_query 匹配。

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

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

4

1 回答 1

1

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

简单实用的解决方案是replace()-构造tsvector.

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

SELECT ... FROM ...
WHERE to_tsvector('english', replace(col, '-', ''))
      @@ to_tsquery('english', replace('search-string', '-' ''));
于 2022-02-24T06:38:44.833 回答