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

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

Войти через центр авторизации
Похожие вопросы
29 мар. 2024, в 18:19
20000 руб./за проект
29 мар. 2024, в 18:08
2500 руб./за проект
29 мар. 2024, в 17:51
40000 руб./за проект