@Flanker381

Как пресечение дублирование результатов запросов?

Задачка больше алгоритмическая чем прикладная.
Есть таблица с полнотекстовым релевантным поиском. Результат каждого уникального запроса записывается в отдельную таблицу (10 позиций, запрос - результат).Проблема в том, что некоторые запросы могут различаться весьма незначительно, склонением, 1 коротким словом и др. При этом по 5, 10, 20 и более схожих запросов - результат один. Собственно суть - пресечь сохранение в таблицу результатов дублей (уникальный индекс не предлагать, контент в запросах меняется) похожих запросов.

По моему - оптимально определять степень релевантности пред идущих запросов и просто не сохранять если результат по проверке имеет высокую релевантность. Поиск реализуется запросом:

SELECT *, MATCH `field` AGAINST ('$search') as relev FROM `table` ORDER BY relev DESC

Как вытянуть показатель relev в переменную php или задать ей значение релевантности около 80% не в курсе.

Буду благодарен за любые мысли по этому поводу.
  • Вопрос задан
  • 2273 просмотра
Пригласить эксперта
Ответы на вопрос 3
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
1. mysql не умеет возвращать релевантность поиска.
2. От меня ускользает смысл в жестком кешировании результатов запроса.
3. Почему бы не использовать для поиска инструменты которые для этого предназначены, например sphinx.
И искать будет качественнее, и скорее всего быстрее, и никакой кеш не нужен будет.
Ответ написан
Комментировать
@Flanker381 Автор вопроса
В общем это нужно для анализа запросов. Соответственно сохраняю те, где результат уникален.
В принципе додумался как это сделать со статичным контентом. Просто берём допустим заголовки первых 10 записей, суммируем, делаем хэш (primary key не по id), и сохраняем вместе с запросом. При следующих запросах проверяем есть ли уже такой хэш в базе.
Но задача усложняется тем, что контент динамичен. Полный цикл обновления контента в базе - месяц. Сегодня мы сохранили один хэш, а завтра в результате этой выдачи одна новая запись и хэш уже другой, при том под вчерашним хэшем будет точно такой же результат -> опять дубль. UPDATE хэш-записи можно сделать при каждом новом идентичном запросе, но в таком случае есть окно между новым похожим запросом-дублем и обновлением старого запроса.
(Извините за заголовок, опечатка)
Ответ написан
Комментировать
@andreyvlru
менеджер-программист
Проиндексируйте свой контент сфинксом, при составлении индекса он туда записывает слова без окончания
то есть "машина" и "машины" будут для него одинаковыми. Если вы будете искать по таким словам, то результаты будут одинаковыми. На выходе сфинкс даст вам набор идентификаторов из БД, его можете сохранить как вам удобно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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