У меня есть таблица базы данных (mysql/pgsql) со следующим форматом:
id|text
1| the cat is black
2| a cat is a cat
3| a dog
Мне нужно выбрать строку, содержащую n-го совпадения слова:
например: "Выберите третье совпадение для слова cat, то есть запись номер 2". Результаты: вторая строка из результата, где 3-е слово - cat
Единственное решение, которое я смог найти, - это поиск всех записей, содержащих текст cat, загрузку их в память и поиск совпадения путем их подсчета. Но это не эффективно для большого количества матчей ( > 1 миллион).
Как бы вы справились с этим эффективным способом? Есть ли что-нибудь, что вы можете сделать непосредственно в базе данных? Возможно, используя другие технологии, такие как lucene?
Обновление: наличие 1 миллиона строк в памяти может быть не большой проблемой, но ожидание приложения должно состоять из активных пользователей 1k-50k, которые могут выполнять эту операцию одновременно.