Postgresql文本搜索,匹配多个单词

时间:2016-04-01 03:22:00

标签: ruby-on-rails ruby postgresql search

我不知道这种搜索的名称,但我发现它变得非常普遍。

假设我有以下文件名的记录: 'order_spec.rb','order.sass','orders_controller_spec.rb'

如果我使用以下字符串'oc'搜索,我希望结果返回'orders_controller_spec.rb',因为它匹配了命令中的o和控制器中的c。 如果字符串是'os',那么我希望所有3匹配,' o rder_ s pec.rb',' o rder 。 s ass',' o rders_controller_ s pec.rb'。 如果字符串是'oco',那么我想要' o rders_ co <​​/ strong> ntroller_spec.rb'

此类搜索的名称是什么?如何在Postgresql中完成此操作?

1 个答案:

答案 0 :(得分:0)

这是一个名为subsequence的搜索。在Postgres中执行此操作的一种简单方法是使用LIKE运算符(或这些文档中的其他几个选项)并使用通配符填充字母之间的空格,LIKE为{{{ 1}}。要匹配%列中的o后跟s的任何内容,就会显示如下:

words

这是一项相对昂贵的搜索,但您可以使用varchar_pattern_opsSELECT * FROM table WHERE words LIKE '%o%s%'; 索引来提高性能,以支持更快的模式匹配。

text_pattern_ops