Pesquisa do Sapo

Post on 06-Jul-2015

4.410 views 1 download

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

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

pesquisa.sapo.pt

Agenda

APIs de acesso à Pesquisa

Como funciona um motor de 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.

A Pesquisa do SAPO

Como funciona um motor de Pesquisa

Tempo de Resposta

Ranking

Volume de Informação

Desafios

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.

•Análise estrutural da Web.

•Autoridade nem sempre qualidade

•Comportamento dos utilizadores ajuda no ranking.

•Problemas com Spam.

Autoridade e Relevância - Desafios

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

Como funciona um motor de Pesquisa

Crawling e análise de conteúdo

Indexação

Query

Fases da Pesquisa

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.

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.

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

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.

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

Indexação

•Cada índice é gerado localmente.

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

Pesquisa em paralelo

Mindstorms

PesquisaDistribuída

PublicidadeContextualizada

Correcção ortográfica

Módulos Contextualizados

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.

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

Merge(Col0, Col1, Col2)

Col 1

Col 0

Col 2

Mindstorms

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

APIs de acesso à Pesquisa

Como funciona um motor de Pesquisa

A Pesquisa do SAPO

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

em Browsers modernos.

OpenSearch

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>joaop@co.sapo.pt</Contact> <Attribution>SAPO - Portugal Online, PT.COM</Attribution> <SyndicationRight>open</SyndicationRight> <AdultContent>false</AdultContent></OpenSearchDescription>

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";}

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

["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}

joaop@co.sapo.pt

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

Obrigado!

Perguntas?