Какие есть варианты и способы имплементации поиска на сайте?
На фронте используется Vue. На бекенде API сервер на Node, возвращающий JSON, БД Mongo (плюс докину Redis, если надо).
Просмотрел страниц 30 в поиске Гитхаба и не нашел ничего подходящего, либо я смотрю что-то не то.
Требования начальные примерно такие:
1. Self-hosted Open Source решение. Т.е. никаких облачных сервисов.
2. Подойдет простой поиск для начала, например по заголовкам статей. Т.е. юзер печатает слово, я его ищу во всех заголовках всех статей что есть в БД и возвращаю ему совпадения.
3. Если есть какие-то готовые проверенные модули, то автокомплит обязателен.
4. На фронте это должно выглядеть так: юзер печатает слово, и когда напечатал уже, скажем символов 5, то я ему возращаю в всплывающем под полем поиска сообщении варианты.
Я так полагаю мне надо решение и для бекенда и для фронта?
Какой вообще принцип имплементации подобного?
Также дополнительные вопросы:
1. Я правильно понял, Algolia это полностью облачное решение? Какой там принцип работы, если у меня все хранится в моей БД? Мне надо туда все переносить и зависить от них полностью? Что тогда делает эта библа?
https://github.com/algolia/instantsearch.js Судя по тому что тредует API ключ, то данные она берет именно из облака Algolia?
2. Elasticsearch это вообще из другой оперы, только для логов? Или же нет? Какие конкретно задачи он выполняет в данном контексте и чем может пригодится?
3. Если пойти простым путем и начать разбираться с typeahead.js, то что там надо имплементировать на бекенде? Судя по их примеру на
twitter.github.io/typeahead.js там при вводе идет запрос на /search?q=hello и возвращается JSON с 20 объектами. Выходит мне надо сделать контроллер на сервере, который будет просто делать постоянно запросы в БД? Или просто держать где-то в памяти абсолютно всю нужную информацию (заголовки и контент статей, например) и выполнять поиск по всему тексту JSом и возвращать совпадения? Как это делается правильно?
В ходе ресерча на Гитхабе было найдено это.
https://github.com/algolia/instantsearch.js // только с Algolia???
https://github.com/algolia/vue-instantsearch // только с Algolia???
Frontend, Autocomplete:
https://github.com/twitter/typeahead.js // в идеале так должно работать
https://github.com/LeaVerou/awesomplete // это похоже работает когда все данные уже на клиенте?
https://github.com/bevacqua/horsey
https://github.com/algolia/autocomplete.js// опять Algolia. это работает только с ними?
https://github.com/santiblanko/vue-instant
Fuzzy Search:
https://github.com/krisk/Fuse
https://github.com/farzher/fuzzysort
https://github.com/mattyork/fuzzy
https://github.com/bevacqua/fuzzysearch
Backend:
https://github.com/tj/reds // это мимо, или для моей задачи?