2016-12-17 3 views
0

Можно ли совместить полную строку с чем-то немного меньше в БД?Rails Postgres ILIKE in reverse

В принципе, у меня может быть строка типа «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

Это не похоже на работу ... запись '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