Presentation

32
Apache Solr Uma Visão Geral Francisco Späth

Transcript of Presentation

Page 1: Presentation

Apache SolrUma Visão Geral

Francisco Späth

Page 2: Presentation

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.

Page 3: Presentation

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;

Page 4: Presentation

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

Page 5: Presentation

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;

Page 6: Presentation

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.

Page 7: Presentation

Requirementos

● Solr distribution: http://lucene.apache.org/solr/

● Java >= 1.5 (Java 1.6 for Solr > 4);● Servlet container (Tomcat, Glassfish, Jetty …);

Page 8: Presentation

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/

Page 9: Presentation

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;

Page 10: Presentation

Faceting

Page 11: Presentation

Pivot FacetingD

ia d

a S

eman

a

Hora do Dia

Page 12: Presentation

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/

Page 13: Presentation

Instalação

Page 14: Presentation

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”;

Page 15: Presentation

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" />

Page 16: Presentation

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>'

Page 17: Presentation

Excluir Documentos

● curl: curl http://localhost:8983/solr/update?commit=true -H "Content-Type: text/xml" --data-binary '<delete> <id>my-id</id></delete>'

● curl: curl http://localhost:8983/solr/update?commit=true -H "Content-Type: text/xml" --data-binary '<delete> <query>field:value</query></delete>'

Page 18: Presentation

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: ( )

Page 19: Presentation

Mão na Massa

Page 20: Presentation

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

Page 21: Presentation

Java e Solr(Solrj)

Page 22: Presentation

Dependências

Page 23: Presentation

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);

Page 24: Presentation

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();

Page 25: Presentation

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();

Page 26: Presentation

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);

Page 27: Presentation

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();

Page 28: Presentation

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();

Page 29: Presentation

Scaling

http://www.memonic.com/user/silvan/folder/search/id/1pbBa

Page 30: Presentation

Limitações

● Near Real Time Search● Expressividade Queries;● Joins;● Documentos planos;

Page 31: Presentation

Alternativas

● ElasticSearch – similar a Solr;– Suporte a Documentos Estruturados;

– Expressividade na Elaboração de Queries;

– Não possui suporte a pivot;

Page 32: Presentation

Perguntas?