Solr - PHP conference 2013

Preview:

DESCRIPTION

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

Citation preview

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

Nome Categoria

Heineken garrafa cerveja

Brahma garrafa cerveja

Duff garrafa cerveja

Heineken engradado cerveja

Tabela de produtos

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

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

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

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

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% ...

Java 6

Lucene ou Solr 4.5.1?

http://Localhost:8983

Apache License version 2 link

Referência

Jetty

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

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" version="1.1"> <types> <!-- tipos --> </types> <fields> <!-- campos --> </fields> </schema>

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

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

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

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>

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 <add> <doc> <field name=“id">42</field> <field name="fieldname1">field valueA</field> <field name="fieldname2">field valueB</field> </doc </add>

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

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

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.

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

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

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

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

Recommended