Your SlideShare is downloading. ×
0
Esqueça o ‘like %%’
Faça buscas inteligentes com Solr
Claudson Oliveira
@cloudson
cloudson.github.io
Tabela de produtos
Nome

Categoria

Heineken garrafa

cerveja

Brahma garrafa

cerveja

Duff garrafa

cerveja

Heineken en...
cerveja

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

Nome

Categoria

Heineken garra...
Duff

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

Nome

Categoria

Heineken garrafa

cerve...
garrafas

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

Nome

Categoria

Heineken ga...
garrafas

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

Nome

Categoria

Heineken garr...
pasteis

where nome like '%pastei% ...

garrafa cerveja

where nome like '%garrafa cerveja% ...

uma gelada

where nome li...
Java 6
Jetty
Lucene ou Solr 4.5.1?
http://Localhost:8983
Apache License version 2 link

Referência
Núcleos

solrSkeleton/schemas/solr.xml
<?xml version="1.0" encoding="UTF-8" ?>
<solr>
<cores adminPath="/admin/cores">
<co...
Esquemas

Produto (schema solr)
Nome
Categoria
Valor
Descricao
Esquemas

solrSkeleton/schemas/product/conf/schema.xml
<?xml version="1.0" encoding="UTF-8"?>
<schema name="Produto" versi...
Esquemas - tipos
Classe

Descrição

Solr. IntField
Solr.StrField

Inteiros de 32bits com sinal
String

Solr.TextField

Tex...
Esquemas - Filtros
solrSkeleton/schemas/product/conf/schema.xml
<?xml version="1.0" encoding="UTF-8"?>
<schema name="Produ...
Esquemas - Filtros
Filtro

Exemplo

TrimFilterFactory

“ phpsp” => “phpsp”

EdgeNGramFilterFactory

“programador” => “pro”...
Handler
solrSkeleton/schemas/product/conf/solrconfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<luceneMatchVers...
Como salvar/atualizar um documento solr ?
Como salvar/atualizar um documento solr ?

POST http://localhost:8983/solr/produto/update HTTP/1.1
Content-Type: text/xml
...
Como buscar informação ?
<?php
$client = new GuzzleHttpClient('http://127.0.0.1:8389/solr/produto');
$request = $client->g...
Rodando

ascii.io/~cloudson
Ferramentas
Solr Pecl - http://pecl.php.net/package/solr
Solarium - http://www.solarium-project.org/
SolrBundle - https://...
1 Relevância
/select?q=nome:cartao^3 OR texto:cartao^1&wt=json
Resultado:

4

1

0

Nome:

Cartão de visita

Celular iphon...
2 Mínimo de termos casados
/select?q=nome:iphone&mm=2&lt;-1 5&lt;80%&wt=json
2 < -1 5 < 80%

Ex:
Iphone capa celular moda ...
3 Configuração default
solrSkeleton/schemas/product/conf/solrconfig.xml
<requestHandler name="standard" class="solr.Standa...
4 Autocomplete
/select?q=nome:iphone&group=true&group.field=categoria&
group.limit=2&wt=json&cache=true
5 Sinônimos
Celular => iphone, galaxy, foston, moto
Dúvidas ?

/cloudson
Leia mais
http://lucene.apache.org/solr/
Livro http://www.packtpub.com/apache-solr-4-cookbook/book
Caching http://wiki.apa...
Solr - PHP conference 2013
Upcoming SlideShare
Loading in...5
×

Solr - PHP conference 2013

997

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
997
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Solr - PHP conference 2013"

  1. 1. Esqueça o ‘like %%’ Faça buscas inteligentes com Solr
  2. 2. Claudson Oliveira @cloudson cloudson.github.io
  3. 3. Tabela de produtos Nome Categoria Heineken garrafa cerveja Brahma garrafa cerveja Duff garrafa cerveja Heineken engradado cerveja
  4. 4. cerveja select * from produtos where nome like '%cerveja%' or categoria like '%cerveja%' Nome Categoria Heineken garrafa cerveja Brahma garrafa cerveja Duffy garrafa cerveja Heineken engradado cerveja
  5. 5. Duff select * from produtos where nome like '%Duff%' or categoria like '%Duff%' Nome Categoria Heineken garrafa cerveja Brahma garrafa cerveja Duff garrafa cerveja Heineken engradado cerveja
  6. 6. garrafas select * from produtos where nome like '%garrafas%' or categoria like '%garrafas%' Nome Categoria Heineken garrafa cerveja Brahma garrafa cerveja Duff garrafa cerveja Heineken engradado cerveja
  7. 7. garrafas select * from produtos where nome like '%garrafa%' or categoria like '%garrafa%' Nome Categoria Heineken garrafa cerveja Brahma garrafa cerveja Duff garrafa cerveja Heineken engradado cerveja
  8. 8. pasteis where nome like '%pastei% ... garrafa cerveja where nome like '%garrafa cerveja% ... uma gelada where nome like '%uma gelada% ... BRAHMA where nome like '%BRAHMA% ... Heineken engradado Ou
  9. 9. Java 6 Jetty Lucene ou Solr 4.5.1? http://Localhost:8983 Apache License version 2 link Referência
  10. 10. Núcleos solrSkeleton/schemas/solr.xml <?xml version="1.0" encoding="UTF-8" ?> <solr> <cores adminPath="/admin/cores"> <core name="produto" instanceDir="produto" /> </cores> </solr>
  11. 11. Esquemas Produto (schema solr) Nome Categoria Valor Descricao
  12. 12. 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>
  13. 13. Esquemas - tipos Classe Descrição Solr. IntField Solr.StrField Inteiros de 32bits com sinal String Solr.TextField Text, usually multiple words or tokens. Solr.DateTime “Y-m-d H:i:s” Referência 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>
  14. 14. 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"> solrSkeleton/schemas/product/conf/schema.xml <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>
  15. 15. 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
  16. 16. 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>
  17. 17. Como salvar/atualizar um documento solr ?
  18. 18. 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>
  19. 19. Como buscar informação ? <?php $client = new GuzzleHttpClient('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
  20. 20. Rodando ascii.io/~cloudson
  21. 21. 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 Benchmark http://people.apache.org/~mikemccand/lucenebench/
  22. 22. 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.
  23. 23. 2 Mínimo de termos casados /select?q=nome:iphone&mm=2&lt;-1 5&lt;80%&wt=json 2 < -1 5 < 80% Ex: Iphone capa celular moda camarote Referência
  24. 24. 3 Configuração default solrSkeleton/schemas/product/conf/solrconfig.xml <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>
  25. 25. 4 Autocomplete /select?q=nome:iphone&group=true&group.field=categoria& group.limit=2&wt=json&cache=true
  26. 26. 5 Sinônimos Celular => iphone, galaxy, foston, moto
  27. 27. Dúvidas ? /cloudson
  28. 28. Leia mais http://lucene.apache.org/solr/ Livro http://www.packtpub.com/apache-solr-4-cookbook/book Caching http://wiki.apache.org/solr/SolrCaching Replication http://wiki.apache.org/solr/SolrReplication SpellChecker http://wiki.apache.org/solr/SpellCheckComponent http://blog.sematext.com/2012/08/23/solr-vs-elasticsearch-part-1-overview/ Obrigado
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×