Pesquisa de texto completo em bancos de dados NoSQL

  • Alguém aqui tem alguma experiência em implantar um sistema online real que tenha uma pesquisa de texto completo em qualquer um dos bancos de dados NoSQL?
  • Por exemplo, como a pesquisa de texto completo se compara no MongoDB, Riak e CouchDB?
  • Algumas das métricas que estou procurando são facilidade de implantação e manutenção e, claro, velocidade.
  • Quão maduros são eles? Eles são algum substituto para a infraestrutura do Lucene?

Obrigado.

Nenhum database “NoSQL” existente fornece uma implementação razoável de algo que poderia ser chamado de “pesquisa de texto completo”. O MongoDB em particular não tem praticamente nada até agora (a correspondência usando expressões regulares não é pesquisa de texto completo e pesquisar usando $ in ou $ todos os operadores em uma lista de palavras-chave é apenas uma implementação muito pobre de uma “pesquisa de texto completo”). Usar o Solr, o ElasticSearch ou o Sphinx é direto – uma implementação e integração no nível do aplicativo. Sua escolha depende muito de seus requisitos e configuração atual.

Aqui estão os detalhes sobre o Riak Search http://wiki.basho.com/Riak-Search.html e uma apresentação sobre ele também

Sim. Veja CouchDB-Lucene, que é uma extensão do CouchDB para suportar consultas completas do Lucene sobre os dados.

MarkLogic tem melhores opções para pesquisa de texto, se bem me lembro. Aqui está uma discussão sobre o tópico , embora esteja em seu blog, de seus escritores.

Estou envolvido no desenvolvimento de um aplicativo usando o Solandra (Apache Solr baseado em Cassandra). Na minha experiência, o sistema é bastante estável e capaz de lidar com dados de TB +. Pessoalmente, estou muito feliz com o software pelas seguintes razões: 1. Particionamento automatizado de dados devido ao backend do Cassandra. 2. Rich resources de consulta (devido ao Solr e Lucene). 3. Leitura rápida e escrita (escreve significativamente mais rápido que as leituras).

No entanto, atualmente Solandra, acredito que não suporta mutações em lote. Ou seja, posso inserir 100 colunas em uma única inserção no Cassandra, mas o Solandra não suporta isso.

Para o MongoDB, ainda não há um recurso completo de indexação de texto completo, mas possivelmente há um na lista, talvez devido à v2.2 .

Enquanto isso, você pode criar um índice invertido simples usando um campo de matriz de cadeia de caracteres e colocando um índice nele, conforme descrito aqui: Pesquisa de texto completo no Mongo

Ou, você poderia manter um índice paralelo de texto completo em um índice Solr ou Lucene dedicado e, se estiver se sentindo realmente ambicioso, replicar diretamente em seu armazenamento de texto completo a partir do oplog Mongo. Caso contrário, preencha e mantenha em sincronia com a lógica do seu aplicativo.

Eu acabei de concluir isso usando dados que são armazenados no MongoDB enquanto tenho o meu mecanismo de Texto Completo na Busca Sphinx . Eu sei que o mongo tem uma questão votável para adicionar o texto completo a uma versão futura; no entanto, neste momento eles não têm isso.

Existem várias maneiras de inserir suas informações do Mongo na esfinge; no entanto, o que eu encontrei mais sorte com (e tem sido extremamente fácil) é através do xmlpipe2 . Demorei um pouco para entender como usar isso; No entanto, este artigo: Sphinx xmlpipe2 em PHP tem um excelente passeio através do qual mostra (pelo menos em PHP) como construir o documento, então como inseri-lo na esfinge.

Essencialmente minha configuração acaba ficando assim:

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

com o meu índice, em seguida, parecendo assim:

 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 } 

Eu tive um excelente sucesso com isso; espero que você considere isso útil.

Se você estiver usando o PHP, existe uma ótima solução para pesquisa de texto completo no MongoDB do database No-SQL chamado MongoLantern. http://sourceforge.net/projects/mongolantern/

Anteriormente eu estava usando o Sphinx + MongoDB para realizar pesquisa de texto completo, o desempenho era ótimo, mas a qualidade do resultado era muito ruim. Com o MongoLantern, minha pesquisa atual melhorou muito.

O MongoLantern também está listado no site do MongoDB.

Por favor, deixe-me saber se você tentar por conta própria.

Projeto cLunce. Também xapian não mencionado acima. Eu uso o Sphinx e é muito bom, mas um pouco desajeitado para configurar. Eu realmente prefiro dados de piping do Mongo para o Sphinx via XMLPIPE2, ao invés de usar o Sphinx ‘SQL no arquivo sphinx.conf.

O Solr pode ser usado com o Mongo Connector da 10gen, que permite enviar dados para lá (entre outros)

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

Do seu exemplo:

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

Definitivamente Solr. É NoSQL.

Tem:

  • desempenho incrível
  • opções impressionantes de armazenamento
  • lenhadores
  • highligting
  • lapidação
  • pesquisa distribuída (SolrCloud)
  • API perfeita
  • administrador da web
  • HTML, PDF, indexação DOC
  • muitos outros resources

O Couchbase 5.0 está liberando resources de pesquisa de texto completo criados no mecanismo Bleve de código aberto. Você ativa a indexação para texto completo e começa a usar nos documentos JSON existentes no database.

Alguns slides e vídeo de apresentação abordando o tema, mencionando Elasticsearch e Lucene também … https://www.slideshare.net/Couchbase/fulltext-search-how-it-works-and-what-it-can-do

Intereting Posts