@nurzhannogerbek

Как найти все схожие записи в таблице?

Здравствуйте! Помогите пожалуйста разобраться.

В базе данных 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;
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 2
where .... like '%your_text%'
Ответ написан
@zhaar
А еще можно убрать все знаки препинания, т.к. они тоже будут создавать лишние проблемы
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы