Задачка больше алгоритмическая чем прикладная.
Есть таблица с полнотекстовым релевантным поиском. Результат каждого уникального запроса записывается в отдельную таблицу (10 позиций, запрос - результат).Проблема в том, что некоторые запросы могут различаться весьма незначительно, склонением, 1 коротким словом и др. При этом по 5, 10, 20 и более схожих запросов - результат один. Собственно суть - пресечь сохранение в таблицу результатов дублей (уникальный индекс не предлагать, контент в запросах меняется) похожих запросов.
По моему - оптимально определять степень релевантности пред идущих запросов и просто не сохранять если результат по проверке имеет высокую релевантность. Поиск реализуется запросом:
SELECT *, MATCH `field` AGAINST ('$search') as relev FROM `table` ORDER BY relev DESC
Как вытянуть показатель relev в переменную php или задать ей значение релевантности около 80% не в курсе.
1. mysql не умеет возвращать релевантность поиска.
2. От меня ускользает смысл в жестком кешировании результатов запроса.
3. Почему бы не использовать для поиска инструменты которые для этого предназначены, например sphinx.
И искать будет качественнее, и скорее всего быстрее, и никакой кеш не нужен будет.
В общем это нужно для анализа запросов. Соответственно сохраняю те, где результат уникален.
В принципе додумался как это сделать со статичным контентом. Просто берём допустим заголовки первых 10 записей, суммируем, делаем хэш (primary key не по id), и сохраняем вместе с запросом. При следующих запросах проверяем есть ли уже такой хэш в базе.
Но задача усложняется тем, что контент динамичен. Полный цикл обновления контента в базе - месяц. Сегодня мы сохранили один хэш, а завтра в результате этой выдачи одна новая запись и хэш уже другой, при том под вчерашним хэшем будет точно такой же результат -> опять дубль. UPDATE хэш-записи можно сделать при каждом новом идентичном запросе, но в таком случае есть окно между новым похожим запросом-дублем и обновлением старого запроса.
(Извините за заголовок, опечатка)
Проиндексируйте свой контент сфинксом, при составлении индекса он туда записывает слова без окончания
то есть "машина" и "машины" будут для него одинаковыми. Если вы будете искать по таким словам, то результаты будут одинаковыми. На выходе сфинкс даст вам набор идентификаторов из БД, его можете сохранить как вам удобно.