Полнотекстовый поиск в базах данных NoSQL

  • Есть ли у кого-нибудь опыт развертывания реальной онлайн-системы, которая имела полный текстовый поиск в любой из баз данных NoSQL?
  • Например, как выглядит сравнение полнотекстового поиска в MongoDB, Riak и CouchDB?
  • Некоторые из показателей, которые я ищу, - это простота развертывания и поддержки и, конечно же, скорость.
  • Насколько зрелы они? Являются ли они заменой инфраструктуры Lucene?

Спасибо.

Ответ 1

Ни одна из существующих баз данных "NoSQL" не обеспечивает разумную реализацию того, что можно назвать "полнотекстовым поиском". MongoDB, в частности, пока ничего не имеет (сопоставление с использованием регулярных выражений не является полнотекстовым поиском и поиском с использованием операторов $in или $all в списке слов ключевого слова - это очень плохая реализация "полнотекстового поиска" ). Использование Solr, ElasticSearch или Sphinx прямолинейно - реализация и интеграция на уровне приложений. Ваш выбор во многом зависит от ваших требований и текущей настройки.

Ответ 3

Да. См. CouchDB-Lucene, который является расширением CouchDB для поддержки полных запросов Lucene данных.

Ответ 4

У MarkLogic есть лучшие варианты текстового поиска, если я помню. Вот обсуждение на тему, хотя это в их блоге, от их авторов.

Ответ 5

Я участвую в разработке приложения, используя Solandra (Apache Solr от Cassandra). По моему опыту, система достаточно стабильна и способна обрабатывать данные ТБ+. Я лично доволен программным обеспечением по следующим причинам: 1. Автоматическое разбиение данных из-за бэкэнда Cassandra. 2. Богатые возможности запросов (из-за Solr и Lucene). 3. Быстрое чтение и запись (запись значительно быстрее, чем чтение).

Однако в настоящее время Solandra, я считаю, не поддерживает пакетные мутации. То есть, я могу вставить 100 столбцов в одну вставку в Cassandra, однако Solandra этого не поддерживает.

Ответ 6

Для MongoDB пока нет полнофункциональной функции полнотекстового индексирования, но, возможно, в ней есть возможно, в v2.2.

Тем временем вы можете создать простой инвертированный индекс, используя поле строкового массива, и поместив на него индекс, как описано здесь: Полнотекстовый поиск в Монго

Или вы можете поддерживать параллельный полнотекстовый индекс в выделенном индексе Solr или Lucene, и если вы чувствуете себя очень амбициозным, реплицируйте непосредственно в полнотекстовый магазин из Mongo oplog. В противном случае запишите оба значения и синхронизируйте их с логикой приложения.

Ответ 7

Я только что закончил это, используя данные, которые хранятся в MongoDB, имея мой полный текст в Поиск сфинксов. Я знаю, что у mongo есть избирательная проблема для добавления полного текста в будущую версию; однако на данный момент у них его нет.

Существует несколько способов вставки вашей монгольской информации в сфинкс; однако тот, с которым я нашел наибольшую удачу (и был очень прост), - это xmlpipe2. Мне потребовалось немного времени, чтобы понять, как это использовать; однако эта статья: Sphinx xmlpipe2 в PHP имеет выдающуюся прогулку, через которую показывают (по крайней мере, на PHP), как создать документ, затем как вставить это в сфинкс.

По существу моя конфигурация выглядит следующим образом:

source my_source {
     type = xmlpipe
     xmlpipe_command = /usr/bin/php /www/generateSphinXml.php identifierForMyTable
}

с моим индексом, выглядящим следующим образом:

index my_index {
     source = my_source
     path = /usr/local/sphinx/var/data/my_index
     docinfo = extern
     min_word_len = 1
     mlock = 0
     morphology = stem_en
     charset_type = utf-8 //<----- This is q requirement however.
     enable_star = 1
     html_strip = 0
     min_prefix_len = 2
}

У меня был отличный успех; надеюсь, вы найдете это полезным.

Ответ 8

Если вы используете PHP, есть отличное решение для полнотекстового поиска в базе данных No-SQL MongoDB, называемой MongoLantern. http://sourceforge.net/projects/mongolantern/

Раньше я использовал Sphinx + MongoDB для полнотекстового поиска, производительность была отличная, но качество результата было очень низким. С MongoLantern мой текущий поиск значительно улучшился.

MongoLantern также указан на сайте MongoDB.

Пожалуйста, дайте мне знать, если вы попробуете его самостоятельно.

Ответ 9

проект cLunce. Также xapian не упомянуто выше. Я использую Sphinx, и это очень хорошо, но несколько неуклюже. Я фактически предпочитаю передавать данные из Mongo в Sphinx через XMLPIPE2, вместо того, чтобы использовать Sphinx 'SQL в файле sphinx.conf.

Ответ 10

Solr может использоваться с 10gen Mongo Connector, что позволяет подталкивать туда данные (среди прочих)

https://github.com/10gen-labs/mongo-connector/tree/master/mongo-connector

Из своего примера:

python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr

Ответ 11

Определенно Solr. Это NoSQL.

Он имеет:

  • Удивительная производительность
  • удивительные возможности хранения
  • стволовые средства
  • highligting
  • огранка
  • распределенный поиск (SolrCloud)
  • совершенный API
  • веб-админ
  • HTML, PDF, индексирование DOC
  • многие другие функции

Ответ 12

Couchbase 5.0 освобождает возможности полнотекстового поиска, созданные на основе движка Bleve с открытым исходным кодом. Вы включаете индексирование для полного текста и начинаете использовать в отношении существующих документов JSON в базе данных.

Некоторые слайды и презентационные видеоролики, посвященные этой теме, также упоминаются Elasticsearch и Lucene... https://www.slideshare.net/Couchbase/fulltext-search-how-it-works-and-what-it-can-do