Что можно использовать для быстрого и неточного поиска в огромном количестве баз?
У меня есть огромное количество баз с записями по типу ID,fullname, first_name, last_name, email, phone, city и т.д.
Я пробовал использовать grep, но если добавлять большие базы, то поиск длится очень долго.
Что можно попробовать для быстрого поиска (не дольше 10 минут) и с неточным запросом?
То есть к примеру есть запись Ivanov Ivan Ivanovich 91300019900, ivan@mail.ru, я могу сделать запрос как по Ivanov Ivan Ivanovich, так и по * Ivan Ivanovich или Ivanov * Ivanovich и т.д.
Я пробовал использовать grep, но если добавлять большие базы, то поиск длится очень долго.
используйте вместо grep утилиту ripgrep всё же пошустрее будет, а еще лучше ripgrep-all что позволит шастать по тем же sqlite и прочим документам
для интерактивности оберните всё это в fzf
в общем за основу можно взять эту функцию и запилить далее под себя
У меня есть огромное количество баз с записями по типу ID,fullname, first_name, last_name, email, phone, city и т.д.
Я пробовал использовать grep
Ты наверное хотел сказать что у тебя есть огромное число текстовых файлов?
Потому что grep - это не инструмент БД.
Что можно попробовать для быстрого поиска (не дольше 10 минут) и с неточным запросом?
Тут - ни один архитектор не знает. Обычно делают так. Покупают железо. Например 2х узловой кластер
и делают шардинг всех данных равномерно. Запускают поиск и смотрят. Отработало за 20 минут к примеру.
Окей. 2 узла == 20 минут. Значит надо сделать 4 узла и снова - шардинг. Запускаем. Смотрим. Хоп. 10 минут.
Отлично.
Опять-же. Годность данного решения сильно зависит от других условий которые вы не озвучили. Например
- будут ли данные обновлятся. И как часто. И будут ли другие виды запросов. На сортировку например.
Это все также влияет.
тескстовые файлы это не базы данных, это просто очень длинные строки
есть специализированные методы поиска подстроки которые в некоторых случаях будут быстрее grep
например https://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%...
Если данных меньше 100К можно всё в память загрузить и сделать инвертированный индекс по триграмам.
Если больше 100К, то можно заливать в Solr, Elastic или даже Lucene.