Eriksen Costa Paixão
● Analista Desenvolvedor na Cobra Tecnologia S.A.
● Mantenedor do i-Educar (software público de gestão escolar)
● 6 anos de experiência PHP
● 2º ano na PHPConf
eriksencosta.wordpress.com
br.linkedin.com/in/eriksencosta
@eriksencosta
tinyurl.com/ieducarspb
SELECT *FROM tableWHERE field LIKE '%something%'
Isso escala?
Depende
● Dados estruturados● Dados não-estruturados
Dados estruturados
● Cadastro de clientes● Catálogo de livros● Tickets de help desk● HTML● HTML+RDF● XHTML● Documentos XML
Dados não-estruturados
● Cadastro de clientes● Catálogo de livros● Tickets de help desk● HTML● HTML+RDF● XHTML● Documentos XML
Como?
Contexto!
SELECT *FROM tableWHERE field LIKE '%something%'
SELECT o.conteudo, FROM Observacoes o, Clientes cWHERE (o.conteudo LIKE '%porcaria%' OR o.conteudo LIKE '%ruim%' OR o.conteudo LIKE '%insatisfeito%') AND o.cliente_id = c.id
Relevância!
E por que me importar?!
Casos de uso
● Aumentar conversão de vendas● Aumentar o tempo de visita ao seu site● Redução de custo (auto-serviço)● Melhorar a usabilidade● Descoberta de novas informações
Full-text search
In text retrieval, full text search refers to a technique for searching a computer-stored document or database.
Fonte: <http://en.wikipedia.org/wiki/Full_text_search>
Você as usa
● Google● Wikipedia● BuscaPé● Knowledge Tree● …● (LIKE, ILIKE, NOT LIKE)
E que tal implementar?
● Biblioteca de busca textual● Java● Indexing de alta performance● Algoritmo de busca eficiente● Ordenação● Diversos tipos de buscas (proximidade,
wilcards, range)● Busca em múltiplos índices
● Servidor de buscas● Baseado no Lucene● Interface HTTP, XML e JSON● Highlighting● Faceted search● Cache, Replicação
Começando
● É uma aplicação Java (.war)● Faça o deploy em seu servidor de aplicação
(Tomcat, Jboss.org, Jetty)● Use a aplicação exemplo (“example”)
Vamos começar?Pequeno passo-a-passo inspirado em: <http://www.slideshare.net/pittaya/using-apache-solr>
1
Configure o schema.xml
$ vim /caminho/solr/wiki_search/solr/conf/schema.xml
<field name="id" type="int" indexed="true" stored="true" required="true" /><field name="body" type="text" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true"/><field name="keywords" type="textgen" indexed="true" stored="true"/>
<field name="text" type="text" indexed="true" stored="false" multiValued="true"/> <copyField source="keywords" dest="text"/><copyField source="body" dest="text"/> <uniqueKey>id</uniqueKey>
2
$ java -jar wiki_search/start.jar
3
Indexe alguns arquivos<?php
$xml = '<add> <doc> <field name="id">%d</field> <field name="title">%s</field> <field name="keywords">%s</field> <field name="body">%s</field> </doc></add><commit/>';$opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: text/xml; charset=UTF-8', 'content' => sprintf($xml, '' [...]); ));$context = stream_context_create($opts);file_get_contents('http://localhost:8983/solr/update', FALSE, $context);
4
http://localhost:8983/solr/select?q=brazil
Não gosta de XML?
http://localhost:8983/solr/select?q=brazil&wt=json
{ "responseHeader":{ "status":0, "QTime":22, "params":{
"fl":"id,title,keywords,score","indent":"on","wt":"json","q":"brazil"}},
"response":{"numFound":214,"start":0,"maxScore":0.76659626,"docs":[{ "id":725, "keywords":"Brazil,Brazil.ogg,.br,1519,1822,1825,1889,1 E12 m²,Acre
(state),Africa,African", "title":[ "Brazil - Wikipedia, the free encyclopedia"], "score":0.76659626},{ "id":3452, "keywords":"National Congress of Brazil,Argentine National
Congress,Bicameralism,Brasilia,Brasília,Brazil,Brazilian Communist Party,Brazilian Federal District,Brazilian Labour Party,Brazilian Socialist Party,Brazilian general elections, 2006",
"title":[ "National Congress of Brazil - Wikipedia, the free encyclopedia"], "score":0.5694134}
Highlighting
http://localhost:8983/solr/select?q=brazil&wt=json
&hl=on&hl.fl=body&hl.simple.pre=<span>
&hl.simple.post=</span>
"highlighting":{ "725":{
"body":["<span>Brazil</span> - Wikipedia, the free encyclopedia <span>Brazil</span> - Wikipedia, the free encyclopedia <span>Brazil</span>"]}, "3452":{
"body":["National Congress of <span>Brazil</span>- Wikipedia, the free encyclopedia National Congress of <span>Brazil</span>"]}
Faceted-search
http://localhost:8983/solr/select?q=brazil&wt=json
&hl=on&hl.fl=body&hl.simple.pre=<span>
&hl.simple.post=</span>&facet=true
&facet.field=keywords
"facet_counts":{ "facet_queries":{}, "facet_fields":{"keywords":[ "programming",106, "language",92, "computer",78, "c",54, "science",38, "2006",37
E tem muito mais...
Mais...
● Cache● Otimizações de performance● Replicação● Analyzers● Plugins
E mais...
● Zend_Search_Lucene● Drupal Solr Module
Documentação
● Não extensa● Leia os arquivos de configuração● Solr está melhor documentado que o Lucene● Zend_Search_Lucene muito bem
documentado, auxilia no entendimento● Faça uma full-text search na Internet...
● Apache Solr● Apache Lucene =)
?
Obrigado!Eriksen Costa Paixã[email protected]
Download em: http://tinyurl.com/ecppcb2009