Tha*_*anh 7 sql postgresql ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
我正在使用Ruby on Rails和pg_search gem在我的项目中使用PostgreSQL数据库进行全文搜索功能.目前,我有一个列表医院,名称如下:
Hospital A
Hospital C
Hospital D
Hospital B A
Run Code Online (Sandbox Code Playgroud)
当我进行搜索时,我希望这个单词Hospital不会影响返回的结果,结果可以不带Hospital前缀排序.
例如,如果我Hospital在查询字段中输入,将没有返回的结果,但如果我输入A,Hospital A并且Hospital B A将是结果,那么结果可以按字母顺序排序而不包含Hospital前缀单词以成为列表:
Hospital A
Hospital B A
Run Code Online (Sandbox Code Playgroud)
我搜索了这个并找到了这个答案:高级MySQL按字母顺序排序前缀?,但答案使用的视图,我不知道如何在Rails中做到这一点.
我不确定pg_search gem是否支持SUBSTRING,因为我在其github上找不到关于它的文档.有谁知道Postgres是否具备做这种工作的功能?
谢谢你的帮助.
更新:我最终使用一列来存储此前缀单词,以便我可以搜索内容并从查询中排除该单词并返回预期结果.对于遇到此问题的任何人,请考虑并尝试我的解决方案,如果它可以拯救你.
您可以切断前缀。此处显示带有前缀“医院”。因为你似乎不想要前缀后面的空格,所以我添加了 1 来跳过它。当然,如果数字始终相同,您也可以只输入数字。要分割所有内容直到第一个空格,您可以使用正则表达式。诀窍是创建一个临时表,您可以在其中添加所需的所有内容,然后轻松地从中进行选择。如果前缀正在更改,您可能希望将内部选择限制为 WHERE name LIKE 'Hospital%'。
SELECT
name
FROM (
SELECT
SUBSTR(name, LENGTH('Hospital') + 1) AS name
FROM
hospital
) AS T
WHERE
name LIKE '%A%'
ORDER BY
name
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |