Presentation

438 visualizações

Publicada em

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
438
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Presentation

  1. 1. Apache Solr Uma Visão Geral Francisco Späth
  2. 2. Agenda ● Introdução; ● Propriedades a Serem Exploradas; ● Instalação; ● Modelos de Documentos (Schema); ● Adicionar, Buscar e Remover Documentos; ● Utilizando Java com Solr (Solrj) ● Utilizando PHP com Solr; ● Scaling, Limitações e Alternativas.
  3. 3. O que é Solr? ● ● Solr é uma plataforma de busca open source do projeto Lucene; Solr usa Lucene; – Lucene (http://lucene.apache.org/core/): Engenharia de busca textual de alta performance escrito inteiramente em Java. ● Escrito em Java; ● Interface HTTP – XML, JSON e outros formatos;
  4. 4. Quem está Usando? ● ● ● ● ● ● Netflix – para otimizar seu sistema de busca; AOL – para otimizar seus canais (Música, Esportes, Carros etc.); Instagram – utiliza para otimizar buscas geoespacial; Casa Branca – para buscas com agrupamento e destaque de termos de busca; Sears – auto-suggest e navegação por agrupamentos; Uma lista completa por ser encontrada em: http://wiki.apache.org/solr/PublicServers
  5. 5. Porque utilizar Solr? ● ● ● ( - ) A criação de índices é um processo demorado; ( - ) Visibilidade das mudanças não é imediata (NRT); ( - ) Geralmente requer re-indexação quando modificado o modelo de dados;
  6. 6. Porque utilizar Solr? ● ( + ) Busca textual sofisticada com uma variedade de parâmetros possíveis; – Sugestões; – Boosting; – Aproximação; – Dependente de Idioma. ● ( + ) Suporte a Faceting e Pivot; ● ( + ) Baseado nas tecnologias Web.
  7. 7. Requirementos ● Solr distribution: http://lucene.apache.org/solr/ ● Java >= 1.5 (Java 1.6 for Solr > 4); ● Servlet container (Tomcat, Glassfish, Jetty …);
  8. 8. Introdução ● Para os exemplos aqui demonstrados a seguinte lista de recursos foi empregada: – Solr 4.4 - Indexing http://lucene.apache.org/solr/downloads.html – Eclipse – Java Dev - http://www.springsource.org/sts – Maven – Gerenciamento de Dependência http://maven.apache.org/
  9. 9. Propriedades a Serem Exploradas ● ● ● Interface HTTP – XML, JSON, PHP, Velocity, Ruby e outros formatos são suportados; Fulltext Search – busca textual; Faceting – capacidade de executar agrupamento de dados com contagem; ● Pivot – visão de dados em cubo; ● Expressões de busca grifadas;
  10. 10. Faceting
  11. 11. Dia da Semana Pivot Faceting Hora do Dia
  12. 12. Instalação ● ● Diferentes guias de instalação para cada container podem ser encontrados aqui: http://wiki.apache.org/solr/SolrInstall Para fins da apresentação utilizaremos a instalação de exemplo distribuída com o próprio pacote Solr para uma abordagem mais pragmática: – java -Dsolr.solr.home=/some/dir -jar start.jar ● http://localhost:8983/solr/
  13. 13. Instalação
  14. 14. Schema ● ● Definição de um modelo para os documentos a serem armazenados. Schema.xml – Configuração de campos; – Configuração de tipos de dados; – Cópia de valores para campos tipo “catch all”;
  15. 15. Definição de um Schema ● Propriedades básicas para declaração de campos: – name; – type (string, int, float, text_general ...); – indexed; – stored; – multiValued; <field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/> <dynamicField name="*_s" type="string" indexed="true" stored="true" />
  16. 16. Armazenar Documentos ● Interface Web – curl: curl http://localhost:8983/solr/update? commit=true -H "Content-Type: text/xml" --data-binary ' <add> <doc> <field name="id">testdoc</field> </doc> </add>'
  17. 17. Excluir Documentos ● curl: curl ● curl: curl http://localhost:8983/solr/update? commit=true -H "Content-Type: text/xml" --databinary ' <delete> <id>my-id</id> </delete>' http://localhost:8983/solr/update? commit=true -H "Content-Type: text/xml" --databinary ' <delete> <query>field:value</query> </delete>'
  18. 18. Busca de Documentos ● Conceito de queries: – Baseado em Lucene Queries: field : value – Wildcard Search: * e ? – Fuzzy Search: “termo”~[similaridade entre 0 e 1] – Busca por Proximidade (posição): “termos”~[número de palavras] – Busca por Faixa: [, ], { e } – Boosting (peso): “termo”^[peso] – Requer e Proíbe: +field:value -field:value – Operadores Lógicos: AND &&, OR || e NOT ! – Agrupamento: ( )
  19. 19. Mão na Massa
  20. 20. Novo Core ● Quando criar um novo core? ● Criando um Novo Core – – ● cp solr/collection1 solr/{new_core_name} edit solr/{new_core_name}/core.properties solr/{new_core_name}/conf/schema.xml
  21. 21. Java e Solr (Solrj)
  22. 22. Dependências
  23. 23. Documentos ● Java: – Utilizando Beans: ● – public class JamendoSolrDocument { @Field private String id; @Field private Integer artistId; … } Utilizando Mapas: ● SolrDocument doc = new SolrDocument(); doc.setField(“id”, “itm145”); doc.setField(“artistId”, 12);
  24. 24. Inserindo Documentos ● Um exemplo complete utilizando java: – MyAnnBean bean = new MyAnnBean(); bean.setSomeProperty("my value"); SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/ {core}"); solrServer.addBean(bean); solrServer.commit();
  25. 25. Excluindo Documentos SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/ {core}"); solrServer.deleteById(Arrays.asList("id-01", "id-02")); solrServer.deleteById("id-03"); solrServer.commit();
  26. 26. Buscando Documentos SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr/ {core}"); SolrQuery query = new SolrQuery( "value_t:(other^2 another)"); QueryResponse response = solrServer.query(query); List<MyBean> rs = response.getBeans(MyBean.class);
  27. 27. Teste Unitário ● CoreContainer container = new CoreContainer("./solr"); container.load(); EmbeddedSolrServer server = new EmbeddedSolrServer(container, "collection1"); QueryResponse qResp = server.query(new SolrQuery("*:*")); SolrDocumentList docList = qResp.getResults(); System.out.println(docList.getNumFound()); server.shutdown();
  28. 28. PHP + Solr? ● ● Instalação: http://php.net/manual/en/book.solr.php $client = new SolrClient($options); $query = new SolrQuery(); $query->setQuery('*:*'); $query->addField('*')->addField('score'); $query_response = $client->query($query); $res = $query_response->getResponse();
  29. 29. Scaling http://www.memonic.com/user/silvan/folder/search/id/1pbBa
  30. 30. Limitações ● Near Real Time Search ● Expressividade Queries; ● Joins; ● Documentos planos;
  31. 31. Alternativas ● ElasticSearch – similar a Solr; – Suporte a Documentos Estruturados; – Expressividade na Elaboração de Queries; – Não possui suporte a pivot;
  32. 32. Perguntas?

×