Полнотекстовый поиск в базах данных NoSQL
- Есть ли у кого-нибудь опыт развертывания реальной онлайн-системы, которая имела полный текстовый поиск в любой из баз данных NoSQL?
- Например, как выглядит сравнение полнотекстового поиска в MongoDB, Riak и CouchDB?
- Некоторые из показателей, которые я ищу, - это простота развертывания и поддержки и, конечно же, скорость.
- Насколько зрелы они? Являются ли они заменой инфраструктуры Lucene?
Спасибо.
Ответы
Ответ 1
Ни одна из существующих баз данных "NoSQL" не обеспечивает разумную реализацию того, что можно назвать "полнотекстовым поиском". MongoDB, в частности, пока ничего не имеет (сопоставление с использованием регулярных выражений не является полнотекстовым поиском и поиском с использованием операторов $in или $all в списке слов ключевого слова - это очень плохая реализация "полнотекстового поиска" ). Использование Solr, ElasticSearch или Sphinx прямолинейно - реализация и интеграция на уровне приложений. Ваш выбор во многом зависит от ваших требований и текущей настройки.
Ответ 2
Здесь подробности о поиске Riak http://wiki.basho.com/Riak-Search.html
и , а также
Ответ 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