Ruby on Rails - 如何在SQL中搜索和排序数据,但排除前缀词



我正在使用Ruby on Rails和pg_search gem在我的项目中使用PostgreSQL数据库进行全文搜索功能。目前,我有一个名单医院,名称如下:

Hospital A
Hospital C
Hospital D
Hospital B A

当我进行搜索时,我希望单词Hospital不会影响返回的结果,并且结果可以在没有前缀的情况下对结果进行排序Hospital

例如,如果我在查询字段中输入Hospital,则不会返回结果,但是如果我输入AHospital AHospital B A将是结果,那么结果可以按字母顺序排序,而无需Hospital前缀词成为列表:

Hospital A
Hospital B A

我对此进行了搜索并找到了这个答案:高级MySQL字母排序与前缀?,但是答案使用我不知道如何在Rails中做到这一点的视图。

我不确定pg_search gem 是否支持 SUBSTRING,因为我在其 github 上没有找到有关它的文档。有谁知道Postgres是否有做这种工作的功能?

感谢您的任何帮助。

更新:我最终使用一列来存储此前缀词,以便我可以搜索内容并从查询中排除该词并返回预期结果。对于遇到此问题的任何人,请考虑并尝试我的解决方案,如果它可以拯救您。

您可以切断前缀。此处显示前缀为"医院"。因为你似乎不想要前缀后面的空格,我加了 1 来跳过它。当然,如果数字总是相同,您也可以输入数字。要拆分所有内容直到第一个空格,您可以使用正则表达式。诀窍是创建一个临时表,您可以在其中根据需要添加所有内容,然后轻松地从中进行选择。如果前缀正在更改,您可能希望将内部选择限制为 WHERE 名称,例如"医院%"。

SELECT
   name
FROM (
   SELECT
      SUBSTR(name, LENGTH('Hospital') + 1) AS name
   FROM
      hospital
   ) AS T
WHERE
   name LIKE '%A%'
ORDER BY
   name
;

SQL小提琴

相关内容

  • 没有找到相关文章

最新更新