- Есть ли у кого-нибудь здесь опыт развертывания реальной онлайн-системы с полнотекстовым поиском в любой из баз данных NoSQL?
- Например, как сравнить полнотекстовый поиск в MongoDB, Riak и CouchDB?
- Некоторые из показателей, которые я ищу, - это простота развертывания и обслуживания и, конечно же, скорость.
- Насколько они зрелые? Являются ли они заменой инфраструктуры Lucene?
Полнотекстовый поиск в базах данных NoSQL
Ответы (10)
Ни одна из существующих баз данных «NoSQL» не обеспечивает разумной реализации того, что можно было бы назвать «полнотекстовым поиском». В частности, в MongoDB пока почти ничего нет (сопоставление с использованием регулярных выражений - это не полнотекстовый поиск, а поиск с использованием операторов $ in или $ all в списке ключевых слов - это просто очень плохая реализация «полнотекстового поиска»). Использование Solr, ElasticSearch или Sphinx просто - реализация и интеграция на уровне приложения. Ваш выбор во многом зависит от ваших требований и текущих настроек.
да. См. CouchDB-Lucene, который является расширением CouchDB для поддержки полных запросов данных Lucene.
Я участвую в разработке приложения с использованием Solandra (Apache Solr на основе Cassandra). По моему опыту, система довольно стабильна и способна обрабатывать данные TB +. Я лично вполне доволен программным обеспечением по следующим причинам: 1. Автоматическое разбиение данных на разделы благодаря бэкэнду Cassandra. 2. Богатые возможности запросов (благодаря Solr и Lucene). 3. Быстрое чтение и запись (запись значительно быстрее чтения).
Однако я считаю, что в настоящее время Solandra не поддерживает пакетные мутации. То есть я могу вставить 100 столбцов за одну вставку в Cassandra, однако Solandra не поддерживает это.
Для MongoDB пока нет функции полнотекстового индексирования, однако, возможно, она находится в стадии разработки, , возможно, появится в версии 2.2.
А пока вы можете создать простой инвертированный индекс, используя поле строкового массива и поместив на него индекс, как описано здесь: Полнотекстовый поиск в Mongo
Или вы можете поддерживать параллельный полнотекстовый индекс в специальном индексе Solr или Lucene, и, если вы чувствуете себя действительно амбициозно, реплицируйте его прямо в свое полнотекстовое хранилище из журнала Mongo. В противном случае заполните оба значения и синхронизируйте их с логикой вашего приложения.
text
индексы, начиная с версии 2.4.
- person Walter Tross; 01.03.2015
Я только что закончил это, используя данные, которые хранятся в MongoDB, в то время как мой полнотекстовый модуль находится в Поиск Sphinx. Я знаю, что у mongo есть решаемая проблема с добавлением полнотекстовых материалов в будущую версию; однако на данный момент у них его нет.
Есть несколько способов вставить информацию о Mongo в sphinx; однако мне больше всего повезло (и это было очень просто) через xmlpipe2 а>. Мне потребовалось немного времени, чтобы полностью понять, как это использовать; однако эта статья: Sphinx xmlpipe2 в PHP У a> есть замечательная инструкция, которая показывает (по крайней мере, на 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
}
У меня был отличный успех в этом; надеюсь, вы найдете это полезным.
Если вы используете PHP, существует отличное решение для полнотекстового поиска в базе данных без SQL MongoDB с именем http://sourceforge.net/projects/mongolantern/
Раньше я использовал Sphinx + MongoDB для выполнения полнотекстового поиска, производительность была отличной, но качество результатов было очень низким. С MongoLantern мой текущий поиск значительно улучшился.
MongoLantern также указан на сайте MongoDB.
Пожалуйста, дайте мне знать, если вы попробуете это самостоятельно.
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
Couchbase 5.0 выпускает возможности полнотекстового поиска, основанные на движке Bleve с открытым исходным кодом. Вы включаете индексирование для полного текста и начинаете использовать его для существующих документов JSON в базе данных.
Некоторые слайды и презентационное видео по теме, в которых также упоминаются Elasticsearch и Lucene ... https://www.slideshare.net/Couchbase/fulltext-search-how-it-works-and-what-it-can-do
cLunce проект. Также xapian не упоминается выше. Я использую Sphinx, он очень хорош, но несколько неудобен в настройке. На самом деле я предпочитаю передавать данные из Mongo в Sphinx через XMLPIPE2, а не использовать SQL Sphinx в файле sphinx.conf.
Определенно Solr. Это NoSQL.
Она имеет:
- потрясающая производительность
- отличные варианты хранения
- стеммеры
- выделение
- огранка
- распределенный поиск (SolrCloud)
- идеальный API
- веб-администратор
- Индексирование HTML, PDF, DOC
- многие другие особенности