Почти все движки баз данных в каком-то виде умеют "полнотекстоый поиск", он же Full Text Search, он же Full Text Index.
Он есть в SQL Server, Postgres, Oracle и даже, простихосподи, MySQL.
Но на весь интернет слышны стоны "FTS какашка, юзайте Elastic!"
(иногда "юзайте Lucene/Solr!", или даже "юзайте Sphinx!")
И меня от этого страшно бомбит.
FTS - не какашка (ну, скажем так, не совсем какашка). Дело в подходе:
- Когда люди юзают "внешние" движки типа Эластика - они пишут дохрена кода, который собирает из нескольких таблиц красивое текстовое представление объекта, потом записывает объект в индекс, следит за обновлениями, удалениями; Потом народ настраивает всякие фильтры (чтобы, например, вычищать HTML- или PDF-разметку), поднимает поисковый кластер, ставит Kafka/RabbitMQ, чтобы к нему обращаться...
- А когда люди юзают full text - они кликают галочку "install" в настройках и ждут, что все заработает.
Само.
И оно, конечно, нихуя не работает.
Если к fts-поиску подойти так же нежно и задумчиво, как мы подходим к Эластику - он будет работать почти так же хорошо.
Например, тоже создавать текстовые представления объектов (через специальные индексированные вьюхи или даже computed-колонки), вычищать HTML (во всех движках есть фильтры), выносить вьюхи и индексы на отдельные диски (или даже отдельные сервера), стараться не использовать mixed-запросы - т.е. комбинацию полнотекстового поиска с обычным SQL; например, запрос
SELECT x FROM y WHERE CONTAINS(blabla) AND MagicNumber = 42 гарантированно сведет планировщик с ума (quick & dirty решение - внести "MagicNumber42" прямо в индексируемый текст) - и всякий прочий тюнинг.В общем, "Tools are never evil. Applications of those tools can be."
Не знаю, зачем я это написал, считайте это продолжением поста про SQL