Недавно я прочитал несколько статей о комбинации mongodb для хранения и elasticsearch для индексирования/поиска. Я чувствую, что я что-то пропускаю. Зачем вам идти по этому маршруту, а не просто используя mongo для индексации данных? Какие преимущества дает elasticsearch и стоит ли добавить дополнительную сложность?
Зачем использовать ElasticSearch с Mongo?
Ответ 1
ElasticSearch реализует гораздо больше функций, таких как пользовательское разделение текста на слова, пользовательское создание, фасетный поиск и многое другое. Хотя MongoDB (довольно простой) поиск текста делает некоторые из этого, он не так сильно, как ElasticSearch.
Если все, что вы делаете, это поиск одной строки в одном поле, тогда обычная система запросов MongoDB будет отлично работать для этого. Если вам нужно искать слова в нескольких полях, то текстовый поиск MongoDB будет работать. Если вам нужно что-то большее, ElasticSearch - это путь.
Ответ 2
Поисковая система и база данных выполняют некоторые принципиально разные вещи. Хорошая поисковая система (например, ElasticSearch) поддерживает гораздо более сложную и сложную индексацию, грани, выделение и т.д. В случае с ElasticSearch вы также получаете свои ответы "в режиме реального времени". С другой стороны, поисковая система не возвращает каждый документ, соответствующий вашему запросу. Вместо этого он будет забивать документы в зависимости от того, насколько они соответствуют, и вернуть верхние очки. Когда вы запрашиваете базу данных, такую как MongoDB, вы должны ожидать, что она вернет все, которая соответствует вашему запросу.
Вы можете хранить весь документ в ElasticSearch, но обычно это не оптимальное решение. Обычно вы настроите его на возврат идентификатора документа, который вы используете для извлечения документа из базы данных. MongoDB - это база данных, оптимизированная для хранения на основе документов. поэтому вы слышите о том, как люди используют их вместе.
изменить:
Когда это было опубликовано, оно соответствовало рекомендациям, но это уже не так.
Ответ 3
Ответ Derick довольно много гвоздей. Вопросы, стоящие за всем этим:
Какие функции вы хотите реализовать в своем приложении?
Если вы полагаетесь на возможности интенсивного поиска в больших фрагментах текста, ElasticSearch, вероятно, хорошо использовать. Если вы хотите иметь гибкое хранилище данных, которое может справиться со сложными специальными запросами, Mongo может быть хорошо подходит. Если у вас разные требования к хранилищу данных, часто бывает полезно объединить два инструмента вместо реализации всех способов обхода, чтобы он работал только с одним хранилищем данных.
Выберите подходящий инструмент для задания.