Rails Найти похожие материалы - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь найти способ найти связанный контент в моем блоге Rails, используя имеющееся у меня поле «имя». Есть ли способ найти тесно связанные посты в базе данных по сходству поля "имя".

Например:

Post 1 name field = this-similarity-other-thing

и

Post 2 name field = this-similarity-something-else

Можно ли как-нибудь найти и найти «this -ходимость» примерно одинаковой в строке, чтобы можно было извлечь ее из базы данных и разрешить ее отображение в виде связанного содержимого?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2020

если вы хотите просто сопоставить подстроку, вы можете использовать подстановочный знак

Post.where("name LIKE '%substring%'")

, если вы хотите включить что-то более гибкое, вы можете попытаться стать более продвинутым с помощью Ransack иasticsearch

0 голосов
/ 04 февраля 2020

Используйте SIMILAR TO вместо LIKE - позволяет работать с регулярными выражениями

names = ['first', 'second', 'third'].join('|') # it gives "first|second|third" string
similar = Post.where("name SIMILAR TO '%(#{names})%'")
0 голосов
/ 01 февраля 2020

Я не уверен, что именно вы ищете в Rails, но именно так я бы это сделал в SQL:

SELECT b.name
  FROM blogs b
  WHERE b.name LIKE 'this-similarity-%'

Возможно, синтаксис Rails будет выглядеть примерно так:

Post.where("name ILIKE 'this-similarity%'")

Конечно, то, как вы получите контекст поста, на котором вы сейчас находитесь (то, что я жестко закодировал как 'this-similarity%'), будет зависеть от ваших деталей реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...