29
Esqueça o ‘like %%’ Faça buscas inteligentes com Solr

Solr - PHP conference 2013

Embed Size (px)

DESCRIPTION

Palestra que dá uma introdução ao Apache Solr na phpconference.

Citation preview

Page 1: Solr - PHP conference 2013

Esqueça o ‘like %%’ Faça buscas inteligentes com Solr

Page 3: Solr - PHP conference 2013
Page 4: Solr - PHP conference 2013

Nome Categoria

Heineken garrafa cerveja

Brahma garrafa cerveja

Duff garrafa cerveja

Heineken engradado cerveja

Tabela de produtos

Page 5: Solr - PHP conference 2013

cerveja

Nome Categoria

Heineken garrafa cerveja

Brahma garrafa cerveja

Duffy garrafa cerveja

Heineken engradado cerveja

select * from produtos where nome like '%cerveja%' or categoria like '%cerveja%'

Page 6: Solr - PHP conference 2013

Duff

Nome Categoria

Heineken garrafa cerveja

Brahma garrafa cerveja

Duff garrafa cerveja

Heineken engradado cerveja

select * from produtos where nome like '%Duff%' or categoria like '%Duff%'

Page 7: Solr - PHP conference 2013

garrafas

Nome Categoria

Heineken garrafa cerveja

Brahma garrafa cerveja

Duff garrafa cerveja

Heineken engradado cerveja

select * from produtos where nome like '%garrafas%' or categoria like '%garrafas%'

Page 8: Solr - PHP conference 2013

garrafas

Nome Categoria

Heineken garrafa cerveja

Brahma garrafa cerveja

Duff garrafa cerveja

Heineken engradado cerveja

select * from produtos where nome like '%garrafa%' or categoria like '%garrafa%'

Page 9: Solr - PHP conference 2013

pasteis

garrafa cerveja

where nome like '%pastei% ...

where nome like '%garrafa cerveja% ...

uma gelada where nome like '%uma gelada% ...

Heineken engradado Ou

BRAHMA where nome like '%BRAHMA% ...

Page 10: Solr - PHP conference 2013

Java 6

Lucene ou Solr 4.5.1?

http://Localhost:8983

Apache License version 2 link

Referência

Jetty

Page 11: Solr - PHP conference 2013

Núcleos

<?xml version="1.0" encoding="UTF-8" ?> <solr> <cores adminPath="/admin/cores"> <core name="produto" instanceDir="produto" /> </cores> </solr>

solrSkeleton/schemas/solr.xml

Page 12: Solr - PHP conference 2013

Esquemas

Produto (schema solr)

Nome

Categoria

Valor

Descricao

Page 13: Solr - PHP conference 2013

Esquemas

solrSkeleton/schemas/product/conf/schema.xml

<?xml version="1.0" encoding="UTF-8"?> <schema name="Produto" version="1.1"> <types> <!-- tipos --> </types> <fields> <!-- campos --> </fields> </schema>

Page 14: Solr - PHP conference 2013

Esquemas - tipos

solrSkeleton/schemas/product/conf/schema.xml

<?xml version="1.0" encoding="UTF-8"?> <schema name="Produto" version="1.1"> <types> <fieldType name="inteiro" class="solr.IntField" /> <fieldType name=“frase" class="solr.StrField" /> </types> <fields> <field name=“id" type="inteiro" />

</fields> </schema>

Classe Descrição

Solr. IntField Inteiros de 32bits com sinal

Solr.StrField String

Solr.TextField Text, usually multiple words or tokens.

Solr.DateTime “Y-m-d H:i:s”

Referência

Page 15: Solr - PHP conference 2013

Esquemas - Filtros

solrSkeleton/schemas/product/conf/schema.xml

<?xml version="1.0" encoding="UTF-8"?> <schema name="Produto" version="1.1"> <types> <fieldType name="inteiro" class="solr.IntField" /> <fieldType name=“frase" class="solr.String" />

<fieldType name=“importante" class=“solr.TextField"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" words="stopwords.txt" /> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.BrazilianStemFilterFactory"/> </analyzer>

</fieldType>

</types> <fields> <field name=“id" type="inteiro" />

</fields> </schema>

solrSkeleton/schemas/product/conf/schema.xml

Page 16: Solr - PHP conference 2013

Esquemas - Filtros

Filtro Exemplo

TrimFilterFactory “ phpsp” => “phpsp”

EdgeNGramFilterFactory “programador” => “pro” , “progr” ... “programador”

WordDelimiterFilterFactory “phpSp” => “php”, “sp” / “git2u” => “git” , “2” , “u”

SynonymFilterFactory “celular” => “iphone”, “galaxy”, “foston”, “celular”

PhoneticFilterFactory ????

Referência

Page 17: Solr - PHP conference 2013

Handler

solrSkeleton/schemas/product/conf/solrconfig.xml

<?xml version="1.0" encoding="UTF-8" ?> <config> <luceneMatchVersion>4.4</luceneMatchVersion> <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/> <dataDir>${solr.core0.data.dir:}</dataDir> <schemaFactory class="ClassicIndexSchemaFactory"/> <updateHandler class="solr.DirectUpdateHandler2" /> <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" /> <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" /> <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" /> <admin> <defaultQuery>solr</defaultQuery> </admin> </config>

Page 18: Solr - PHP conference 2013

Como salvar/atualizar um documento solr ?

Page 19: Solr - PHP conference 2013

Como salvar/atualizar um documento solr ?

POST http://localhost:8983/solr/produto/update HTTP/1.1 Content-Type: text/xml <add> <doc> <field name=“id">42</field> <field name="fieldname1">field valueA</field> <field name="fieldname2">field valueB</field> </doc </add>

Page 20: Solr - PHP conference 2013

Como buscar informação ?

<?php $client = new \Guzzle\Http\Client('http://127.0.0.1:8389/solr/produto'); $request = $client->get('/select?q=nome:iphone&wt=json'); $response = $request->send()->json(); // Faça o que quiser com o json $response

Page 22: Solr - PHP conference 2013

Ferramentas Solr Pecl - http://pecl.php.net/package/solr

Solarium - http://www.solarium-project.org/

SolrBundle - https://github.com/floriansemm/SolrBundle

Guzzle - https://github.com/guzzle/guzzle

http://people.apache.org/~mikemccand/lucenebench/

Benchmark

Page 23: Solr - PHP conference 2013

1 Relevância

/select?q=nome:cartao^3 OR texto:cartao^1&wt=json

Resultado: 4 1 0

Nome: Cartão de visita Celular iphone Caderno pequeno

Texto: Ótima forma de divulgar sua marca. Tenha um cartão.

Combina com seu cartão de visita personalizado

Volte pra faculdade com estilo.

Page 24: Solr - PHP conference 2013

2 Mínimo de termos casados

/select?q=nome:iphone&mm=2&lt;-1 5&lt;80%&wt=json

2 < -1 5 < 80%

Iphone capa celular moda camarote

Ex:

Referência

Page 25: Solr - PHP conference 2013

3 Configuração default

<requestHandler name="standard" class="solr.StandardRequestHandler"> <lst name="defaults"> <str name="defType">dismax</str> <str name="qf">nome^5.0 categoria^4.0 descricao^3.0</str> <str name="mm">2&lt;-1 5&lt;80%</str> <str name="wt">json</str> <int name="rows">20</int> </lst> </requestHandler>

solrSkeleton/schemas/product/conf/solrconfig.xml

Page 26: Solr - PHP conference 2013

4 Autocomplete

/select?q=nome:iphone&group=true&group.field=categoria& group.limit=2&wt=json&cache=true

Page 27: Solr - PHP conference 2013

5 Sinônimos

Celular => iphone, galaxy, foston, moto

Page 28: Solr - PHP conference 2013

Dúvidas ? /cloudson

Page 29: Solr - PHP conference 2013

Replication http://wiki.apache.org/solr/SolrReplication

SpellChecker http://wiki.apache.org/solr/SpellCheckComponent

Leia mais

Livro http://www.packtpub.com/apache-solr-4-cookbook/book

http://lucene.apache.org/solr/

Caching http://wiki.apache.org/solr/SolrCaching

http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/

Obrigado