2016-12-17 27 views
0

是否可以將完整的字符串與DB中少一些的內容匹配?Rails Postgres ILIKE反向

基本上,我可能有一個字符串,如「Microsoft Windows XP Home Edition」或「Microsoft Windows XP SP2」,但在我的數據庫中我有「Microsoft Windows XP」。

目前,我使用ILIKE

Issue.where(type: :os).where("name ILIKE ?", "%Windows XP SP2%")

這是自該SP2部分不存在未找到匹配。

那麼,有沒有一些功能可以讓我在數據庫字段中添加一些通用的東西,並且如果輸入更具體一些,就能找出匹配的東西?

回答

1

你應該在這種情況下使用PostgreSQL full text search

例子查詢:

Issue.where("to_tsvector(name) @@ to_tsquery('Windows|XP|SP2')") 
+0

這似乎並沒有工作...在我的DB的'name'項是 'Microsoft Windows XP中'而且我通過你的建議碰到數據庫的是'Windows XP SP2'。在這種情況下,我期望'Windows XP'能夠匹配。 'Issue.where(type::os).where(「name〜*?」,「Windows XP SP2」)'。什麼都不返回 – Godzilla74

+0

是的,你是對的。你需要看全文搜索。簡單的例子'Issue.where(「to_tsvector(name)@@ to_tsquery('Windows | XP | SP2')」)' –

+0

這工作......我只需要在刪除DB語句之前先分隔空格。想更新您的答案? – Godzilla74