Здравствуйте! Помогите пожалуйста разобраться.
В базе данных
PostgreSQL есть таблица со списком вопросах и выглядит таблица следующим образом:
| QUESTION_ID | QUESTION_TEXT |
|-------------|--------------------------------------------------|
| 1 | What is your favorite movie, cartoon and series? |
| 2 | What is your favorite movie cartoon and series |
| 3 | what is your favorite Movie, Cartoon and Series |
| 4 | Do you like apple? |
| 5 | do you like Apple |
| 6 | What is your favorite city? |
Как вы видите, в таблице есть схожие записи. К примеру, текст в записях с идентификатором 1, 2 и 3 похож для человеческого глаза, но эти записи разные для машины.
Если выполнить данный запрос возвращает лишь 2 записи c точным совпадением.
select
*
from
questions
where
question_text in (
'What is your favorite movie, cartoon and series?',
'Do you like apple?'
)
Мне нужно по этим двум вопросам, которые упомянуты в вышестоящем запросе найти все схожиме записи. Схожесь должна быть 90 процентов. Вроде как для таких целей есть модуль
pg_trgm, в которой присутствует функция
similarity. Она возвращает значение схожести от 0 до 1.
Что я сделал:
1) Я включил расширение pg_trgm:
CREATE EXTENSION pg_trgm;
2) Создал индекс на столбец question_text:
CREATE INDEX questions_trgm_idx ON questions
USING gin (question_text gin_trgm_ops);
3) Данный запрос возвращает все записи по одному предложению. Как сделать схожий поиск по нескольким предложениям?
select
question_text,
similarity(
question_text,
'What is your favorite movie, cartoon and series?'
)
from
answers
where
question_text % 'What is your favorite movie, cartoon and series?'
and similarity(
question_text,
'What is your favorite movie, cartoon and series?'
) >= 0.9;