我正在使用Ruby on Rails和pg_search gem在我的项目中使用PostgreSQL数据库进行全文搜索功能。目前,我有一个列表医院,名称如下:
Hospital A
Hospital C
Hospital D
Hospital B A
当我进行搜索时,我希望单词Hospital
不会影响返回的结果,并且结果可以在没有Hospital
前缀的情况下进行排序。
例如,如果我在查询字段中输入Hospital
,则不会返回结果,但如果我输入A
,Hospital A
和Hospital B A
将成为结果,则结果可以按字母顺序排序,不带Hospital
前缀单词,以成为列表:
Hospital A
Hospital B A
我对此进行了搜索并找到了this answer: Advanced MySQL Alphabetical Sort with Prefix?,但使用了一个我不知道如何在Rails中执行此操作的视图的答案。
我不确定pg_search gem是否支持SUBSTRING,因为我在其github上找不到关于它的文档。有谁知道Postgres是否具备做这种工作的功能?
感谢您的帮助。
已更新:我最后使用一列来存储此前缀字,以便我可以搜索内容并从查询中排除该字并返回预期结果。对于遇到此问题的任何人,请考虑并尝试我的解决方案,如果它可以拯救你。
答案 0 :(得分:1)
您可以剪切前缀。此处显示前缀为' Hospital'。因为你似乎不想要前缀后面的空格我加了1来跳过它。当然,如果数字始终相同,您也可以输入数字。要将所有内容拆分到第一个空格,您可以使用正则表达式。诀窍是创建一个临时表,您可以根据需要添加所有内容,然后轻松地从中进行选择。如果前缀正在改变,您可能希望将内部选择限制为WHERE名称LIKE' Hospital%'。
SELECT
name
FROM (
SELECT
SUBSTR(name, LENGTH('Hospital') + 1) AS name
FROM
hospital
) AS T
WHERE
name LIKE '%A%'
ORDER BY
name
;