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

Спасибо.

Ответы [ 12 ]

10 голосов
/ 28 марта 2011

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

9 голосов
/ 28 марта 2011

Вот подробности о Riak Search http://wiki.basho.com/Riak-Search.html и презентация на нем

7 голосов
/ 28 марта 2011

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

5 голосов
/ 03 октября 2011

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

4 голосов
/ 04 октября 2011

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

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

3 голосов
/ 28 марта 2011

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

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

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

1 голос
/ 30 декабря 2011

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

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

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

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

1 голос
/ 16 ноября 2011

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

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

По сути, мой конфиг выглядит так:

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
}

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

0 голосов
/ 13 сентября 2017

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

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

0 голосов
/ 01 октября 2013

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

Имеет:

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