SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
pesquisa.sapo.pt



       João Pedro Gonçalves
       Codebits, 14 de Novembro 2007
Agenda




    A Pesquisa do SAPO


    Como funciona um motor de Pesquisa


    APIs de acesso à Pesquisa
A Pesquisa do SAPO


• 40 milhões Pesquisas
  por mês.

• 50 Queries por
  Segundo (QPS).

• Acordo com Google
  desde 1999.

• Indexador FAST com
  cerca de 75 milhões
  de páginas indexadas.
A Pesquisa do SAPO


• Frontend em mod_perl

• Perl, Python, PHP, C e
  C++

• Equipa de 10
  programadores nas
  áreas de Pesquisa,
  Anúncios
  contextualizados e
  Directório
A Pesquisa do SAPO




• Interface com menus
  contextuais.

• Preview e Gravar
  página como PDF.

• Pesquisa de Notícias e
  Blogs portugueses.
Como funciona um motor de Pesquisa



       Desafios



                 Tempo de Resposta



                 Ranking


                 Volume de Informação
Tempo de resposta - ciclo Search, Find, Obtain
       Mindstorms

                                   Acesso rápido à
                                   caixa de Pesquisa.




                                   Resultado
Tempo de
                                   pretendido rápido
carregamento da
                                   de encontrar na
páginas de destino
                                   página.
está fora de
controle do motor
de busca.
Autoridade e Relevância - Desafios



• Análise estrutural
  da Web.

• Autoridade nem
  sempre qualidade

• Comportamento
  dos utilizadores
  ajuda no ranking.

• Problemas com
  Spam.
Volume da Informação - Desafios


    ~15 KB                75            1 Terabyte de Indice
por documento     milhões de páginas        de Pesquisa




 Objectivo: No caso Português, garantir 50 QPS em menos
 de 500ms por Pesquisa, com um Índice de 1 Terabyte.
Como funciona um motor de Pesquisa



       Fases da Pesquisa



                  Crawling e análise de conteúdo



                  Indexação


                  Query
Crawlers
• Percorrem as páginas que
  irão ser indexadas.

• Limite de pedidos por
  site.

• Vários sites em
  simultâneo, optimizado
  para a largura de banda
  disponível.

• Crawling distribuído.

• Master distribui tarefas,
  cada nó é responsável
  pelo seu armazenamento.
Document Pipeline

• Conteúdo dos crawlers é
  enviado para a Document
  Pipeline.

• Envio em batch dos
  documentos.

• Cada url é um objecto
  Document.

• No início do processo,
  apenas sabemos a url e o
  conteúdo do documento não
  processado.
DOCInit
    Document Pipeline       EncodingNormalizer         Preparar Documento
                          PDF/Flash / doc Converter
                                HTMLParsing
                                LinkExtractor           Analizar estrutura
                                LinkAnalyzer
                             LanguageDetector
                                 Vectorizer             Análise linguística
                                Lemmatizer
                                GetLocations
                              GetPersonNames
• Cada componente na                                  Extracção de Entidades

  cadeia é um módulo          GetDateAndTime
                              QualityBoosting
  isolado que altera o                                Controle de Qualidade
                                RankTuning
  objecto Document.
                             SerializeDocument

• Módulos desenvolvidos       Send to Indexer
  em Python.
                                                        Índice
Vectorizer: Clustering de conteúdo
[senado aprova, 1]
[michael mukasey, 1]                     [posições controversas, 1]
[attorney general, 1]                    [aprova responsável, 1]
[estados unidos, 1]                      [senado aprova, 1]
[justiça, 1]                             [attorney general, 0.707107]
[aprova responsável, 1]                  [attorney, 0.707107]
[alberto gonzales, 0.707107]             [oito procuradores, 0.707107]
[reformado michael, 0.707107]            [procuradores públicos, 0.707107]
[mukasey substitui, 0.707107]            [interrogatório waterboarding, 0.707107]
[unidos confirmou, 0.707107]             [debate duro, 0.707107]
[oito procuradores, 0.707107]            [michael mukasey, 0.707107]
[opiniões controversas, 0.707107]        [substitui alberto gonzales, 0.707107]
[juiz reformado, 0.707107]
[procuradores públicos, 0.707107]
[substitui alberto gonzales, 0.707107]




• Essencial para evitar resultados semelhantes.
• Vector do documento permite efectuar análise de
  clusters.
Indexação                      doc1, (pos1,pos2, .., posN)




                                   doc2, (pos1,pos2, .., posN)
                           termo



                                   docN, (pos1,pos2, .., posN)


• Índices invertidos
  optimizados para a
  intersecção de termos.

• Posição relativa dos
  termos é guardada.
Indexação
                                        5, (90,125,324)


                           mindstorm
                                          34, (5, 46)
           23, (1,25,34)




          34, (4, 45, 925)

                                       doc34
lego
                                        .....  ......   ...
            45, (2, 322)
                                       ... lego mindstorm ...
                                                .....
             9, (10023)


                                              U               =
                                       lego       mindstorm       doc34
Indexação




• Cada índice é gerado localmente.

• Perfil do Índice permite definir quais os campos
  mais relevantes e qual o peso.
Pesquisa em paralelo

                                Publicidade
 Mindstorms                   Contextualizada


                                                   Correcção
                                                   ortográfica




                                                   Módulos
                                                Contextualizados




                 Pesquisa
                Distribuída
Pesquisa distribuída


• Cada nó de Pesquisa tem
  uma porção do índice total
  de Pesquisa.

• A um conjunto de nós com o
  mesmo índice chamamos de
  Coluna.

• Uma pesquisa na Coluna
  devolve sempre os mesmos
  resultados.
Query


• Ao conjunto de nós que
  perfazem a totalidade do
  Índice, mas sem redundância
  chamamos de Linha.

• Cada Linha responde a um
  número limitado de QPS.

• Uma pesquisa é efectuada
  em todas as colunas
  presentes numa Linha.
Query


• A Matriz da Pesquisa é o
  número de nós
  [Linhas x Colunas ]

• Cada Pesquisa é balanceada
  dentro de cada Coluna para
  ser servida por um dos nós
  com o mesmo Índice.

• O algoritmo de MergeSort
  ordena os resultados que
  vêm de cada nó.
Query   Mindstorms




              Col 2




              Col 0




                      Merge(Col0, Col1, Col2)


              Col 1
Open source

• Lucene

   • Motor em Java.

   • Suporte perfis de índices e
     pesquisa em campos.

• SolR

   • Baseado no Lucene.

   • Optimizado para conteúdo web.

   • APIs JSON e XML/RPC
Agenda




    A Pesquisa do SAPO


    Como funciona um motor de Pesquisa


    APIs de acesso à Pesquisa
OpenSearch


• Protocolo Opensearch da A9
• RSS para a Pesquisa.
• Auto-discovery suportada
  em Browsers modernos.
OpenSearch

<?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?>
<OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearchdescription/1.0/quot;>
  <Url>http://pesquisa.sapo.pt/openSearch?
q={searchTerms}&amp;count={count}&amp;fs={startIndex}&amp;rss=1</Url>
  <Format>http://a9.com/-/spec/opensearchrss/1.0/</Format>
  <ShortName>SAPO</ShortName>
  <LongName>Pesquisa SAPO</LongName>
  <Description>Pesquisa no Directorio SAPO - Portuguese only</Description>
  <Tags>sapo portugal directorio pesquisa</Tags>
  <Image>http://imgs.sapo.pt/images/c2/www.sapo.pt/icones_topo/logotipo/logo_b.gif</Image>
  <SampleSearch>sapo</SampleSearch>
  <Developer>Joao Pedro Goncalves</Developer>
  <Contact>joaop@co.sapo.pt</Contact>
  <Attribution>SAPO - Portugal Online, PT.COM</Attribution>
  <SyndicationRight>open</SyndicationRight>
  <AdultContent>false</AdultContent>
</OpenSearchDescription>




http://services.sapo.pt/Metadata/Service/Search
OpenSearch em Perl


use WWW::OpenSearch;

my $url = quot;http://services.sapo.pt/Metadata/OpenSearch/Searchquot;;
my $engine = WWW::OpenSearch->new($url);

# Perform search for quot;sapoquot;
my $response = $engine->search(quot;sapoquot;);
for my $item ($response->feed->items) {
    print $item->title, quot;ntquot;,
          $item->link, quot;nquot;;
}




http://services.sapo.pt/Metadata/Service/Search
Query completion - Collective Intelligence

• Análise dos queries
  efectuados na Pesquisa do
  SAPO

• Ordenar as pesquisas mais
  frequentes devolve
  comportamentos dos
  Portugueses, um sistema de
  sugestões de Pesquisa

• Fonte de informação valiosa
  para previsão de
  comportamento dos
  utilizadores
Query completion


 • Integração com Firefox

 • Serviço já disponível

 • Extremamente rápido

 • Interface em JSON e XML



[quot;quarteiraquot;,[quot;quarteiraquot;,quot;apartamentos quarteiraquot;,quot;ferias quarteiraquot;,quot;hoteis
quarteiraquot;,quot;mapa quarteiraquot;,quot;hoteis em quarteiraquot;,quot;quarteira
apartamentosquot;,quot;quarteira nomes de cafesquot;,quot;hotel quarteira solquot;,quot;apartamentos na
quarteiraquot;,quot;quarteiraturquot;,quot;quarteiraoquot;,quot;orbitur quarteiraquot;,quot;quartos
quarteiraquot;,quot;camping quarteiraquot;,quot;parque campismo quarteiraquot;],[],[]]

http://pesquisa.sapo.pt/livesapo?q={query}
Obrigado!

Perguntas?


             joaop@co.sapo.pt



             João Pedro Gonçalves
             Codebits, 14 de Novembro 2007

Mais conteúdo relacionado

Semelhante a SAPO Pesquisa - Como funciona um motor de pesquisa

Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Miguel Gallardo
 
Elasticsearch com node.js
Elasticsearch com node.jsElasticsearch com node.js
Elasticsearch com node.jsKirmayr tomaz
 
Sistemas Inteligentes para Textos da Web
Sistemas Inteligentes para Textos da WebSistemas Inteligentes para Textos da Web
Sistemas Inteligentes para Textos da WebFernando Hideo Fukuda
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearchtdc-globalcode
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Tchelinux
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebJoel Pinho Lucas
 
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...Bruno Rossetto Machado
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionaisRoberto Oliveira
 
P10 dev studio
P10 dev studioP10 dev studio
P10 dev studioPirata Mao
 

Semelhante a SAPO Pesquisa - Como funciona um motor de pesquisa (20)

Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
Elasticsearch: Motor de busca e além. Lições aprendidas criando Tu Próximo...
 
Elasticsearch com node.js
Elasticsearch com node.jsElasticsearch com node.js
Elasticsearch com node.js
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Sistemas Inteligentes para Textos da Web
Sistemas Inteligentes para Textos da WebSistemas Inteligentes para Textos da Web
Sistemas Inteligentes para Textos da Web
 
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e ElasticsearchTDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
TDC2016POA | Trilha PHP - Desenvolvendo um buscador com PHP e Elasticsearch
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
Behaviour-Driven Development com Ruby
Behaviour-Driven Development com RubyBehaviour-Driven Development com Ruby
Behaviour-Driven Development com Ruby
 
dnad12
dnad12dnad12
dnad12
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
Tomada de decisões com xPaaS aplicada ao fantasy game oficial do campeonato b...
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionais
 
P10 dev studio
P10 dev studioP10 dev studio
P10 dev studio
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
Primeiros Passos Com Elasticsearch
Primeiros Passos Com ElasticsearchPrimeiros Passos Com Elasticsearch
Primeiros Passos Com Elasticsearch
 
Félix do Carmo e Luís Trigo - Tradutores e máquinas de tradução
Félix do Carmo e Luís Trigo - Tradutores e máquinas de traduçãoFélix do Carmo e Luís Trigo - Tradutores e máquinas de tradução
Félix do Carmo e Luís Trigo - Tradutores e máquinas de tradução
 
Curso HTML 5 - Aula Inicial
Curso HTML 5 - Aula InicialCurso HTML 5 - Aula Inicial
Curso HTML 5 - Aula Inicial
 

Mais de codebits

Gis SAPO Hands On
Gis SAPO Hands OnGis SAPO Hands On
Gis SAPO Hands Oncodebits
 
Aplicações Web TV no Meo
Aplicações Web TV no MeoAplicações Web TV no Meo
Aplicações Web TV no Meocodebits
 
Forms Usability 101
Forms Usability 101Forms Usability 101
Forms Usability 101codebits
 
Speak up: como criar Speech-based apps
Speak up: como criar Speech-based appsSpeak up: como criar Speech-based apps
Speak up: como criar Speech-based appscodebits
 
XMPP Hands-On
XMPP Hands-OnXMPP Hands-On
XMPP Hands-Oncodebits
 
Mitos da Acessibilidade Web
Mitos da Acessibilidade WebMitos da Acessibilidade Web
Mitos da Acessibilidade Webcodebits
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunnercodebits
 
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...codebits
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunnercodebits
 
Exploring XMPP
Exploring XMPPExploring XMPP
Exploring XMPPcodebits
 
Sapo BUS Hands-On
Sapo BUS Hands-OnSapo BUS Hands-On
Sapo BUS Hands-Oncodebits
 
Qtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencerQtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencercodebits
 
Making the Chumby
Making the ChumbyMaking the Chumby
Making the Chumbycodebits
 
Globs - Gestão de Glossários
Globs - Gestão de GlossáriosGlobs - Gestão de Glossários
Globs - Gestão de Glossárioscodebits
 
ATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de TraduçõesATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de Traduçõescodebits
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Javacodebits
 
Sapo GIS Hands-On
Sapo GIS Hands-OnSapo GIS Hands-On
Sapo GIS Hands-Oncodebits
 
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008codebits
 

Mais de codebits (20)

Gis SAPO Hands On
Gis SAPO Hands OnGis SAPO Hands On
Gis SAPO Hands On
 
Aplicações Web TV no Meo
Aplicações Web TV no MeoAplicações Web TV no Meo
Aplicações Web TV no Meo
 
Forms Usability 101
Forms Usability 101Forms Usability 101
Forms Usability 101
 
Speak up: como criar Speech-based apps
Speak up: como criar Speech-based appsSpeak up: como criar Speech-based apps
Speak up: como criar Speech-based apps
 
XMPP Hands-On
XMPP Hands-OnXMPP Hands-On
XMPP Hands-On
 
Mitos da Acessibilidade Web
Mitos da Acessibilidade WebMitos da Acessibilidade Web
Mitos da Acessibilidade Web
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
 
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
Hardware Hacking area: Make Cool Things with Microcontrollers (and learn to s...
 
CouchDB
CouchDBCouchDB
CouchDB
 
Getting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko FreerunnerGetting started with mobile devices development - Openmoko Freerunner
Getting started with mobile devices development - Openmoko Freerunner
 
Exploring XMPP
Exploring XMPPExploring XMPP
Exploring XMPP
 
Sapo BUS Hands-On
Sapo BUS Hands-OnSapo BUS Hands-On
Sapo BUS Hands-On
 
Qtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencerQtractor - An Audio/MIDI multi-track sequencer
Qtractor - An Audio/MIDI multi-track sequencer
 
Making the Chumby
Making the ChumbyMaking the Chumby
Making the Chumby
 
Globs - Gestão de Glossários
Globs - Gestão de GlossáriosGlobs - Gestão de Glossários
Globs - Gestão de Glossários
 
ATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de TraduçõesATrad - Sistema de Garantia de Qualidade de Traduções
ATrad - Sistema de Garantia de Qualidade de Traduções
 
Alto Desempenho com Java
Alto Desempenho com JavaAlto Desempenho com Java
Alto Desempenho com Java
 
Sapo GIS Hands-On
Sapo GIS Hands-OnSapo GIS Hands-On
Sapo GIS Hands-On
 
Gis@sapo
Gis@sapoGis@sapo
Gis@sapo
 
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008Practical Thin Server Architecture With Dojo Sapo Codebits 2008
Practical Thin Server Architecture With Dojo Sapo Codebits 2008
 

SAPO Pesquisa - Como funciona um motor de pesquisa

  • 1. pesquisa.sapo.pt João Pedro Gonçalves Codebits, 14 de Novembro 2007
  • 2. Agenda A Pesquisa do SAPO Como funciona um motor de Pesquisa APIs de acesso à Pesquisa
  • 3. A Pesquisa do SAPO • 40 milhões Pesquisas por mês. • 50 Queries por Segundo (QPS). • Acordo com Google desde 1999. • Indexador FAST com cerca de 75 milhões de páginas indexadas.
  • 4. A Pesquisa do SAPO • Frontend em mod_perl • Perl, Python, PHP, C e C++ • Equipa de 10 programadores nas áreas de Pesquisa, Anúncios contextualizados e Directório
  • 5. A Pesquisa do SAPO • Interface com menus contextuais. • Preview e Gravar página como PDF. • Pesquisa de Notícias e Blogs portugueses.
  • 6. Como funciona um motor de Pesquisa Desafios Tempo de Resposta Ranking Volume de Informação
  • 7. Tempo de resposta - ciclo Search, Find, Obtain Mindstorms Acesso rápido à caixa de Pesquisa. Resultado Tempo de pretendido rápido carregamento da de encontrar na páginas de destino página. está fora de controle do motor de busca.
  • 8. Autoridade e Relevância - Desafios • Análise estrutural da Web. • Autoridade nem sempre qualidade • Comportamento dos utilizadores ajuda no ranking. • Problemas com Spam.
  • 9. Volume da Informação - Desafios ~15 KB 75 1 Terabyte de Indice por documento milhões de páginas de Pesquisa Objectivo: No caso Português, garantir 50 QPS em menos de 500ms por Pesquisa, com um Índice de 1 Terabyte.
  • 10. Como funciona um motor de Pesquisa Fases da Pesquisa Crawling e análise de conteúdo Indexação Query
  • 11. Crawlers • Percorrem as páginas que irão ser indexadas. • Limite de pedidos por site. • Vários sites em simultâneo, optimizado para a largura de banda disponível. • Crawling distribuído. • Master distribui tarefas, cada nó é responsável pelo seu armazenamento.
  • 12. Document Pipeline • Conteúdo dos crawlers é enviado para a Document Pipeline. • Envio em batch dos documentos. • Cada url é um objecto Document. • No início do processo, apenas sabemos a url e o conteúdo do documento não processado.
  • 13. DOCInit Document Pipeline EncodingNormalizer Preparar Documento PDF/Flash / doc Converter HTMLParsing LinkExtractor Analizar estrutura LinkAnalyzer LanguageDetector Vectorizer Análise linguística Lemmatizer GetLocations GetPersonNames • Cada componente na Extracção de Entidades cadeia é um módulo GetDateAndTime QualityBoosting isolado que altera o Controle de Qualidade RankTuning objecto Document. SerializeDocument • Módulos desenvolvidos Send to Indexer em Python. Índice
  • 14. Vectorizer: Clustering de conteúdo [senado aprova, 1] [michael mukasey, 1] [posições controversas, 1] [attorney general, 1] [aprova responsável, 1] [estados unidos, 1] [senado aprova, 1] [justiça, 1] [attorney general, 0.707107] [aprova responsável, 1] [attorney, 0.707107] [alberto gonzales, 0.707107] [oito procuradores, 0.707107] [reformado michael, 0.707107] [procuradores públicos, 0.707107] [mukasey substitui, 0.707107] [interrogatório waterboarding, 0.707107] [unidos confirmou, 0.707107] [debate duro, 0.707107] [oito procuradores, 0.707107] [michael mukasey, 0.707107] [opiniões controversas, 0.707107] [substitui alberto gonzales, 0.707107] [juiz reformado, 0.707107] [procuradores públicos, 0.707107] [substitui alberto gonzales, 0.707107] • Essencial para evitar resultados semelhantes. • Vector do documento permite efectuar análise de clusters.
  • 15. Indexação doc1, (pos1,pos2, .., posN) doc2, (pos1,pos2, .., posN) termo docN, (pos1,pos2, .., posN) • Índices invertidos optimizados para a intersecção de termos. • Posição relativa dos termos é guardada.
  • 16. Indexação 5, (90,125,324) mindstorm 34, (5, 46) 23, (1,25,34) 34, (4, 45, 925) doc34 lego ..... ...... ... 45, (2, 322) ... lego mindstorm ... ..... 9, (10023) U = lego mindstorm doc34
  • 17. Indexação • Cada índice é gerado localmente. • Perfil do Índice permite definir quais os campos mais relevantes e qual o peso.
  • 18. Pesquisa em paralelo Publicidade Mindstorms Contextualizada Correcção ortográfica Módulos Contextualizados Pesquisa Distribuída
  • 19. Pesquisa distribuída • Cada nó de Pesquisa tem uma porção do índice total de Pesquisa. • A um conjunto de nós com o mesmo índice chamamos de Coluna. • Uma pesquisa na Coluna devolve sempre os mesmos resultados.
  • 20. Query • Ao conjunto de nós que perfazem a totalidade do Índice, mas sem redundância chamamos de Linha. • Cada Linha responde a um número limitado de QPS. • Uma pesquisa é efectuada em todas as colunas presentes numa Linha.
  • 21. Query • A Matriz da Pesquisa é o número de nós [Linhas x Colunas ] • Cada Pesquisa é balanceada dentro de cada Coluna para ser servida por um dos nós com o mesmo Índice. • O algoritmo de MergeSort ordena os resultados que vêm de cada nó.
  • 22. Query Mindstorms Col 2 Col 0 Merge(Col0, Col1, Col2) Col 1
  • 23. Open source • Lucene • Motor em Java. • Suporte perfis de índices e pesquisa em campos. • SolR • Baseado no Lucene. • Optimizado para conteúdo web. • APIs JSON e XML/RPC
  • 24. Agenda A Pesquisa do SAPO Como funciona um motor de Pesquisa APIs de acesso à Pesquisa
  • 25. OpenSearch • Protocolo Opensearch da A9 • RSS para a Pesquisa. • Auto-discovery suportada em Browsers modernos.
  • 26. OpenSearch <?xml version=quot;1.0quot; encoding=quot;UTF-8quot;?> <OpenSearchDescription xmlns=quot;http://a9.com/-/spec/opensearchdescription/1.0/quot;> <Url>http://pesquisa.sapo.pt/openSearch? q={searchTerms}&amp;count={count}&amp;fs={startIndex}&amp;rss=1</Url> <Format>http://a9.com/-/spec/opensearchrss/1.0/</Format> <ShortName>SAPO</ShortName> <LongName>Pesquisa SAPO</LongName> <Description>Pesquisa no Directorio SAPO - Portuguese only</Description> <Tags>sapo portugal directorio pesquisa</Tags> <Image>http://imgs.sapo.pt/images/c2/www.sapo.pt/icones_topo/logotipo/logo_b.gif</Image> <SampleSearch>sapo</SampleSearch> <Developer>Joao Pedro Goncalves</Developer> <Contact>joaop@co.sapo.pt</Contact> <Attribution>SAPO - Portugal Online, PT.COM</Attribution> <SyndicationRight>open</SyndicationRight> <AdultContent>false</AdultContent> </OpenSearchDescription> http://services.sapo.pt/Metadata/Service/Search
  • 27. OpenSearch em Perl use WWW::OpenSearch; my $url = quot;http://services.sapo.pt/Metadata/OpenSearch/Searchquot;; my $engine = WWW::OpenSearch->new($url); # Perform search for quot;sapoquot; my $response = $engine->search(quot;sapoquot;); for my $item ($response->feed->items) { print $item->title, quot;ntquot;, $item->link, quot;nquot;; } http://services.sapo.pt/Metadata/Service/Search
  • 28. Query completion - Collective Intelligence • Análise dos queries efectuados na Pesquisa do SAPO • Ordenar as pesquisas mais frequentes devolve comportamentos dos Portugueses, um sistema de sugestões de Pesquisa • Fonte de informação valiosa para previsão de comportamento dos utilizadores
  • 29. Query completion • Integração com Firefox • Serviço já disponível • Extremamente rápido • Interface em JSON e XML [quot;quarteiraquot;,[quot;quarteiraquot;,quot;apartamentos quarteiraquot;,quot;ferias quarteiraquot;,quot;hoteis quarteiraquot;,quot;mapa quarteiraquot;,quot;hoteis em quarteiraquot;,quot;quarteira apartamentosquot;,quot;quarteira nomes de cafesquot;,quot;hotel quarteira solquot;,quot;apartamentos na quarteiraquot;,quot;quarteiraturquot;,quot;quarteiraoquot;,quot;orbitur quarteiraquot;,quot;quartos quarteiraquot;,quot;camping quarteiraquot;,quot;parque campismo quarteiraquot;],[],[]] http://pesquisa.sapo.pt/livesapo?q={query}
  • 30. Obrigado! Perguntas? joaop@co.sapo.pt João Pedro Gonçalves Codebits, 14 de Novembro 2007