Pesquisa do Sapo
-
Upload
codebits -
Category
Technology
-
view
4.410 -
download
1
description
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}&count={count}&fs={startIndex}&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>
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}