Pesquisa do Sapo

30
João Pedro Gonçalves Codebits, 14 de Novembro 2007 pesquisa.sapo.pt

description

Iniciação ao mundo da Pesquisa, o que há num motor de Pesquisa moderno, APIs da Pesquisa do SAPO.

Transcript of Pesquisa do Sapo

Page 1: Pesquisa do Sapo

João Pedro GonçalvesCodebits, 14 de Novembro 2007

pesquisa.sapo.pt

Page 2: Pesquisa do Sapo

Agenda

APIs de acesso à Pesquisa

Como funciona um motor de Pesquisa

A Pesquisa do SAPO

Page 3: 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

Page 4: 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

Page 5: Pesquisa do Sapo

• Interface com menus contextuais.

•Preview e Gravar página como PDF.

•Pesquisa de Notícias e Blogs portugueses.

A Pesquisa do SAPO

Page 6: Pesquisa do Sapo

Como funciona um motor de Pesquisa

Tempo de Resposta

Ranking

Volume de Informação

Desafios

Page 7: Pesquisa do Sapo

Mindstorms

Acesso rápido à caixa de Pesquisa.

Resultado pretendido rápido de encontrar na página.

Tempo de resposta - ciclo Search, Find, Obtain

Tempo de carregamento da páginas de destino está fora de controle do motor de busca.

Page 8: Pesquisa do Sapo

•Análise estrutural da Web.

•Autoridade nem sempre qualidade

•Comportamento dos utilizadores ajuda no ranking.

•Problemas com Spam.

Autoridade e Relevância - Desafios

Page 9: Pesquisa do Sapo

Volume da Informação - Desafios

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

75 milhões de páginas

~15 KB por documento

1 Terabyte de Indice de Pesquisa

Page 10: Pesquisa do Sapo

Como funciona um motor de Pesquisa

Crawling e análise de conteúdo

Indexação

Query

Fases da Pesquisa

Page 11: Pesquisa do Sapo

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.

Page 12: Pesquisa do Sapo

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.

Page 13: Pesquisa do Sapo

Controle de Qualidade

Análise linguística

Analizar estrutura

Preparar DocumentoDocument PipelineDOCInit

EncodingNormalizer

HTMLParsing

LinkExtractor

LinkAnalyzer

Vectorizer

Lemmatizer

PDF/Flash / doc Converter

LanguageDetector

QualityBoosting

RankTuning

SerializeDocument

Send to Indexer

Extracção de Entidades

GetLocations

GetPersonNames

GetDateAndTime

Índice

•Cada componente na cadeia é um módulo isolado que altera o objecto Document.

•Módulos desenvolvidos em Python.

Page 14: Pesquisa do Sapo

[senado aprova, 1][michael mukasey, 1][attorney general, 1][estados unidos, 1][justiça, 1][aprova responsável, 1][alberto gonzales, 0.707107][reformado michael, 0.707107][mukasey substitui, 0.707107][unidos confirmou, 0.707107][oito procuradores, 0.707107][opiniões controversas, 0.707107][juiz reformado, 0.707107][procuradores públicos, 0.707107][substitui alberto gonzales, 0.707107]

Vectorizer: Clustering de conteúdo

[posições controversas, 1][aprova responsável, 1][senado aprova, 1][attorney general, 0.707107][attorney, 0.707107][oito procuradores, 0.707107][procuradores públicos, 0.707107][interrogatório waterboarding, 0.707107][debate duro, 0.707107][michael mukasey, 0.707107][substitui alberto gonzales, 0.707107]

•Essencial para evitar resultados semelhantes.•Vector do documento permite efectuar análise de

clusters.

Page 15: Pesquisa do Sapo

doc1, (pos1,pos2, .., posN)

termodoc2, (pos1,pos2, .., posN)

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

Indexação

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

•Posição relativa dos termos é guardada.

Page 16: Pesquisa do Sapo

lego

23, (1,25,34)

34, (4, 45, 925)

45, (2, 322)

9, (10023)

mindstorm

5, (90,125,324)

34, (5, 46)

mindstormlego... ...

...... ........

.....

doc34

mindstormlego

U

doc34

=

Indexação

Page 17: Pesquisa do Sapo

Indexação

•Cada índice é gerado localmente.

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

Page 18: Pesquisa do Sapo

Pesquisa em paralelo

Mindstorms

PesquisaDistribuída

PublicidadeContextualizada

Correcção ortográfica

Módulos Contextualizados

Page 19: Pesquisa do Sapo

Pesquisa distribuída

•Cada nó de Pesquisa temuma 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.

Page 20: Pesquisa do Sapo

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.

Page 21: Pesquisa do Sapo

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

Page 22: Pesquisa do Sapo

Query

Merge(Col0, Col1, Col2)

Col 1

Col 0

Col 2

Mindstorms

Page 23: Pesquisa do Sapo

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

Page 24: Pesquisa do Sapo

Agenda

APIs de acesso à Pesquisa

Como funciona um motor de Pesquisa

A Pesquisa do SAPO

Page 25: Pesquisa do Sapo

•Protocolo Opensearch da A9•RSS para a Pesquisa.•Auto-discovery suportada

em Browsers modernos.

OpenSearch

Page 26: Pesquisa do Sapo

OpenSearch

http://services.sapo.pt/Metadata/Service/Search

<?xml version="1.0" encoding="UTF-8"?><OpenSearchDescription xmlns="http://a9.com/-/spec/opensearchdescription/1.0/"> <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>[email protected]</Contact> <Attribution>SAPO - Portugal Online, PT.COM</Attribution> <SyndicationRight>open</SyndicationRight> <AdultContent>false</AdultContent></OpenSearchDescription>

Page 27: Pesquisa do Sapo

OpenSearch em Perl

http://services.sapo.pt/Metadata/Service/Search

use WWW::OpenSearch;

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

# Perform search for "sapo"my $response = $engine->search("sapo");for my $item ($response->feed->items) { print $item->title, "\n\t", $item->link, "\n";}

Page 28: Pesquisa do Sapo

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

Page 29: Pesquisa do Sapo

["quarteira",["quarteira","apartamentos quarteira","ferias quarteira","hoteis quarteira","mapa quarteira","hoteis em quarteira","quarteira apartamentos","quarteira nomes de cafes","hotel quarteira sol","apartamentos na quarteira","quarteiratur","quarteirao","orbitur quarteira","quartos quarteira","camping quarteira","parque campismo quarteira"],[],[]]

• Integração com Firefox

•Serviço já disponível

•Extremamente rápido

• Interface em JSON e XML

Query completion

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

Page 30: Pesquisa do Sapo

[email protected]

João Pedro GonçalvesCodebits, 14 de Novembro 2007

Obrigado!

Perguntas?