Подтвердить что ты не робот

Параметры полнотекстового поиска для настройки MongoDB

Мы планируем хранить миллионы документов в MongoDB, и полнотекстовый поиск очень необходим. Я читал Elasticsearch и Solr - лучшие доступные решения для полнотекстового поиска.

  • Является ли Elastic search достаточно зрелым, чтобы его можно было использовать для полнотекстового поиска Mongodb? Мы также собираем коллекции. Работает ли Elasticsearch с коллекциями Sharded?

  • Каковы преимущества и недостатки использования Elasticsearch или Solr?

  • Может ли MongoDB выполнять полный текстовый поиск?

4b9b3361

Ответ 1

В MongoDB есть некоторые возможности поиска, но они не такие многофункциональные, как поисковые системы.

http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo

Мы используем Mongo с Solr, чтобы сделать контент доступным для поиска. Мы предпочитаем Solr, потому что

  • Легко настроить и настроить
  • У этого сообщества большое сообщество (это действительно полезно, если вы работаете с инструментами open source).

Поскольку мы не работали с ES, я не мог много говорить об этом. Вы можете найти некоторые обсуждения о Solr vs ES по ссылкам ниже.

Ответ 2

У меня есть опыт работы с Solr/MySQL и ElasticSearch/MongoDB.

Если вы собираетесь много раз запрашивать свою поисковую систему, вы уже оштрафовали свой MongoDB (я имею в виду, если вы хотите очертить слишком свою поисковую систему): вы должны использовать ElasticSearch, если только вы не хотите, чтобы сделано с помощью ElasticSearch. И вы должны использовать его, даже если вы не собираетесь обманывать.

ElasticSearch - это новый проект поверх Lucene, который привносит механизм окантовки от тех, кто используется для распределенных сред и поиска (Shay Bannon сделал Compass и работал в Gigaspaces, редакторе datagrid).

ElasticSearch так же просто, как MongoDB для осколков, я думаю, что он еще проще и по умолчанию отлично работает для большинства случаев.


Мне так не нравится Solr.

  • langage запроса вообще не структурирован (но это касается плагинов и Lucene, и я думаю, вы можете использовать этот неструктурированный запрос langage с ES тоже)
  • Я не думаю, что есть правильный клиент Solr. Клиент Solr java отстой, и я слышал, что ребята из PHP также жалуются, в то время как ElasticSearch Java-клиент очень приятный, гораздо более типичный и предлагает поддержку async (хорошо, если вы используете Netty для примера). С помощью Solr вы сделаете много конкатенации строк.
  • Менее простота масштабирования
  • Не так новый проект, я чувствовал, что у него есть технический отдел. ElasticSearch рождается из Compass, поэтому я думаю, что весь технический отдел был сброшен, чтобы иметь новый новый подход.

Что касается импорта данных, у меня есть опыт работы с реками Solr DataImportHandler и ElasticSearch (CouchDB и MongoDB). Я могу вам сказать:

  • Solr позволяет делать больше вещей, но в очень неструктурированном XML-способе, и документация не поможет вам так много понять, что действительно происходит, когда вы вышли из мира привет и попытаетесь использовать некоторые дополнительные функции.
  • Подход ElasticSearch более прост и также ограничен, но имеет встроенную поддержку некоторых технологий, в то время как DataImportHandler кажется более сложным - дружественным SQL
  • В моем проекте Solr мне пришлось использовать ручную индексацию для некоторых документов, но это было главным образом из-за невозможности денормализовать необходимые данные в документе (проект Solr использует MySQL).

Существует также новый соединитель MongoDB для Solr и ElasticSearch, который мне нужно протестировать как можно скорее:) http://blog.mongodb.org/post/29127828146/introducing-mongo-connector


Итак, в конце концов, я окончательно выберу ElasticSearch, потому что:

  • Теперь у него отличное сообщество.
  • Многие люди, которых я знаю с опытом работы с Solr, как ElasticSearch
  • Клиентская сторона более безопасна и структурирована и обеспечивает асинхронную работу с Java Futures
  • Оба могут, возможно, легко импортировать данные из MongoDB с помощью нового соединителя
  • Насколько я знаю, он позволяет делать почти все, что делает Solr (по моему опыту, но я не специалист по поисковым системам).
  • Он добавляет окантовку из коробки.
  • Он добавляет перколяцию, которая может помочь в построении масштабируемых приложений реального времени (но вам, вероятно, потребуется дополнительная технология обмена сообщениями).
  • Исходный код, который я прочитал, почти не имеет технического отдела по сравнению с Solr (по крайней мере, на стороне клиента), и кажется, что легко создавать плагины.

Ответ 3

В терминах MongoDB изначально, нет, у него нет поддержки полного текстового поиска. Вы можете видеть, что это популярный запрос функции:

https://jira.mongodb.org/browse/SERVER-380

Из того, что я знаю о плагине рек ES для MongoDB, он обрабатывает функцию oplog для ее функциональности. Так как у заштрихованной установки будет несколько залогов, и нет никакого способа легко изменить этот код для подключения через монго.

Аналогично для Solr, примеры, которые я видел, обычно связаны с аналогичным поведением с ES-плагином. Здесь еще более полная информация:

http://blog.knuthaugen.no/2010/04/cooking-with-mongodb-and-solr.html

У меня нет опыта использования одного, но другие уже делали сравнения, посмотрите здесь:

Solr vs. ElasticSearch

ElasticSearch, Sphinx, Lucene, Solr, Xapian. Что подходит для использования?

Ответ 4

MongoDB не может выполнять эффективный полнотекстовый поиск. Вы можете выполнять подстановочный поиск по полям, но я не думаю, что они эффективно используют индексы.

Я бы рекомендовал использовать речную функциональность ElasticSearch для автоматического перевода документов из MongoDB в ElasticSearch.

elasticsearch-river-mongodb - это MongoDB to Elasticsearch river, что при изменении документа в MongoDB ElasticSearch будет отслеживать oplog и затем автоматически обновлять свой индекс.

Это минимизирует проблему синхронизации двух хранилищ данных, поскольку ElasticSearch просто контролирует таблицы репликации Mongo.

Ответ 5

Монго не подходит для полнотекстового поиска. Очевидно, вам нужно индексировать свои поля для быстрого поиска, а индексирование полей, содержащих BIG-данные (длинные длинные строки), не будет выполнено в монго. он имеет предел 1k для индекса, если у вас есть контент больше thn 1k, он будет проигнорирован индексом и не будет отображаться в результатах вашего поиска. очевидно, если вы пытаетесь выполнить полный текстовый поиск своих статей, монго не является хорошим выбором.

Ответ 6

В настоящее время в MongoDB 2.4.6 теперь есть полнотекстовый поиск в MongoDB, и он более функциональный, чем в предыдущих версиях. На http://docs.mongodb.org/manual/core/text-search/ описаны возможности новой функциональности.

Стоит упомянуть:

  • обозначает и ставит поисковый запрос во время создания индекса и выполнения текстовой команды. присваивает оценку каждому документу, который
  • содержит поисковый запрос в индексированных полях. Оценка определяет релевантность документа для заданного поискового запроса.

Однако в этом ответе (с сентября 2013 года) fooobar.com/questions/236098/... вы можете видеть, что монго все еще предупреждает об использовании этой функциональности в производстве. Эта функциональность все еще находится в стадии бета-тестирования.

Ответ 7

Полностью текстовый поиск становится возможным в среде продукта с Mongodb с версии 2.6, создавая текстовый индекс в обязательных полях. индексный текст в mongodb