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

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

person unj2    schedule 28.03.2011    source источник
comment
RavenDB по умолчанию использует lucene. Проверьте это здесь, ravendb.net/faq/lucene-queries-examples. Это означает встроенный полнотекстовый поиск. Я использовал его в прошлом, но мне кажется, что он «не готов к производству».   -  person Andrew Orsich    schedule 28.03.2011
comment
MarkLogic - это база данных NoSQL, в основе которой лежит полнотекстовый поиск в реальном времени. См. developer.marklogic.com/products/marklogic-server/which-nosql   -  person Eric Bloch    schedule 27.07.2012
comment
См. Также http://stackoverflow.com/questions/13174627/searching-text-from-db-sql-server/22854200#22854200   -  person NoNaMe    schedule 27.05.2014
comment
Dgraph утверждает, что поддерживает полнотекстовый поиск: dgraph.io/tour/search/5   -  person VasiliNovikov    schedule 12.06.2020


Ответы (10)


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

person Andreas Jung    schedule 28.03.2011
comment
Lucene / Solr потрясающе быстр по сравнению с использованием $ in - person Chris Fulstow; 28.03.2011
comment
Неправильно - у Riak есть Riak-Search (см. Ниже), который является неотъемлемой частью продукта и обеспечивает хорошую реализацию lucene imho. Мы протестировали это и планируем использовать в производстве для очень большого веб-приложения. - person Elad; 28.03.2011
comment
@Eland: Не могли бы вы поделиться с нами результатами ваших тестов и что заставило вас использовать Riak? Большое тебе спасибо. - person unj2; 28.03.2011
comment
Согласовано. То, что в MongoDB почти ничего нет, не означает, что люди, использующие Riak, BigCouch или CouchDB-Lucene, должны перестать получать удовольствие. - person JasonSmith; 28.03.2011
comment
У нас в MarkLogic это уже давно есть. Извините, я пропустил это предыдущее обсуждение. - person Eric Bloch; 01.12.2011
comment
Я бы не согласился. RavenDB имеет отличные возможности полнотекстового поиска. - person Steve Dunn; 10.08.2012
comment
Кто сказал, что Solr - это не NoSQL? Потрясающая производительность, отличный API и действительно хорошая модель хранения с возможностью управления параметрами хранения и индексации. Доступны стеммеры, фасетирование, подсветка, а также Java с открытым исходным кодом. Я не использовал лучший инструмент для полного текста. - person OSP; 01.10.2013

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

person JasonSmith    schedule 28.03.2011

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

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

person Irfan    schedule 04.10.2011

Для MongoDB пока нет функции полнотекстового индексирования, однако, возможно, она находится в стадии разработки, , возможно, появится в версии 2.2.

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

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

person Chris Fulstow    schedule 28.03.2011
comment
MongoDB имеет text индексы, начиная с версии 2.4. - person Walter Tross; 01.03.2015

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

Есть несколько способов вставить информацию о Mongo в sphinx; однако мне больше всего повезло (и это было очень просто) через 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
}

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

person Petrogad    schedule 16.11.2011

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

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

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

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

person Sougata Pal    schedule 30.12.2011

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

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

Из их примера:

python mongo_connector.py -m localhost:27217 -t http://localhost:8080/solr
person Andriy Tkach    schedule 29.10.2012

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

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

person 1tylermitchell    schedule 13.09.2017

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

person FYA    schedule 21.07.2011

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

Она имеет:

  • потрясающая производительность
  • отличные варианты хранения
  • стеммеры
  • выделение
  • огранка
  • распределенный поиск (SolrCloud)
  • идеальный API
  • веб-администратор
  • Индексирование HTML, PDF, DOC
  • многие другие особенности
person OSP    schedule 01.10.2013