Presentation
-
Upload
marcondes-macaneiro -
Category
Documents
-
view
230 -
download
2
Transcript of Presentation
Apache SolrUma Visão Geral
Francisco Späth
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.
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;
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
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;
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.
Requirementos
● Solr distribution: http://lucene.apache.org/solr/
● Java >= 1.5 (Java 1.6 for Solr > 4);● Servlet container (Tomcat, Glassfish, Jetty …);
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/
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;
Faceting
Pivot FacetingD
ia d
a S
eman
a
Hora do Dia
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/
Instalação
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”;
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" />
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>'
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>'
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: ( )
Mão na Massa
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
Java e Solr(Solrj)
Dependências
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);
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();
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();
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);
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();
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();
Scaling
http://www.memonic.com/user/silvan/folder/search/id/1pbBa
Limitações
● Near Real Time Search● Expressividade Queries;● Joins;● Documentos planos;
Alternativas
● ElasticSearch – similar a Solr;– Suporte a Documentos Estruturados;
– Expressividade na Elaboração de Queries;
– Não possui suporte a pivot;
Perguntas?