introdução ao solr e faceted search

25
Solr 4: Introdução e Faceted Search Michel Bottan [email protected] TDC 2014 São Paulo

Upload: michel-bottan

Post on 27-Jun-2015

856 views

Category:

Technology


1 download

DESCRIPTION

Introdução ao Solr e Faceted Search. Case Elo7 de métricas de busca baseada em Solr.

TRANSCRIPT

Page 1: Introdução ao Solr e Faceted Search

Solr 4: Introdução e Faceted Search

Michel [email protected]

TDC 2014 São Paulo

Page 2: Introdução ao Solr e Faceted Search

Quem sou ?● Software Craftsman nos Greyjoy da Elo7● Empreendedor e co-founder da Comune ● Experiência com Solr na Abril Digital, Comune e Elo7. ● Entusiasta de negócios de impacto social

○ Elo7 é um marketplace com +60mil vendedores.

Agenda● Introdução ao Solr● Faceted Search case Elo7

Page 3: Introdução ao Solr e Faceted Search

Information Retrieval (IR)

“Information retrieval is the activity of obtaining information resources relevant to an information need from a collection of information resources. Searches can be based on metadata or on full-text (or other content-based) indexing.”

--Wikipedia

Page 4: Introdução ao Solr e Faceted Search

O que é ?

O que é ?

Solr é uma plataforma de busca open source confiável, escalável e tolerante a falha.

Apache Lucene Project

Engine de busca textual de alta-performance em Java. Open source e seu core pode ser usado independente do Solr.

Page 5: Introdução ao Solr e Faceted Search

Engine de busca textual

● Lucene criado em 1999 por Doug Cutting, mesmo criador do Nutch e Hadoop.

● Solr criado 2004 por Yonik Seeley● Em 2010, projetos Lucene e Solr mergeados● Solr e Lucene versão 4.9.0 ● Mesmo time de desenvolvedores.● Backed by Lucid Imagination

Histórico

Page 6: Introdução ao Solr e Faceted Search

Features

● Full-text search● Hit hightlighting● Faceted search● Fuzzy / Proximity search● Near real-time indexing● Database integration● Rich document handling● Geospatial search

Page 7: Introdução ao Solr e Faceted Search

Interface HTTP Query e Indexação

Query Parsing

Text Analysis

Search Components● Facets● Filtering● Geospatial● Spelling● More Like ThisCaching

Admin

DIH - Data Import Handler

Index Replication

Index Searcher / Writer Query Parser

Arquitetura

Page 8: Introdução ao Solr e Faceted Search

Pipeline indexação

{ "id":"ABC_123", "title":"Zen zazen"...}

Tokenizer Filter

DocumentoPost

/update

Field Analyzer indexação/query

Lucene Inverted Index

Alianças de casamento

WhitespaceTokenizer Alianças de casamento

LowercaseFilter alianças de casamento

StopwordFilter alianças casamento

PortugueseLightStemmerFilter alianc casament

Page 9: Introdução ao Solr e Faceted Search

Índice invertido

Page 10: Introdução ao Solr e Faceted Search

Schema Design● Campos definidos: explicitamente declarados na configuração

<field name="preco" type="float" default="0.0" indexed="true" stored="true"/>

● Campos dinâmicos: sufixo determina o tipo do campo <dynamicField name="*_i" type="int" indexed="true" stored="true"/>

● Campos copiados: campo de origem e destino

<copyField source="cat" dest="text" maxChars="30000" />

● Schemaless Mode: Solr infere o tipo na primeira chamada e cria um schema dinâmicamente

Page 11: Introdução ao Solr e Faceted Search

Query syntax● Query single e multi term

○ nome_campo: valor ou titulo:casamento

● Operadores +, -, AND, OR NOT ○ titulo: (software AND engineer)

● Range queries: em campos númericos e data ○ timestamp: [ * TO NOW ] ou preco: [ 1 TO 100 ]

● Boost queries:○ titulo:Lembrancinha ^1.5 OR text:Lembrancinha

● Fuzzy search: busca por palavras com grafia semelhante○ calda ~0.8 => cauda

● Proximity Search: phrase query menos restrita. Quanto mais perto os termos, maior o score.

○ “apache lucene”~20

Page 12: Introdução ao Solr e Faceted Search

● tf (t in d): frequência do termo no documento○ número de vezes que o termo t aparece no documento d ○ documentos com mais ocorrências do termo t recebem maior score

● idf (t): frequência inversa do documento ○ inverso da docFreq (número de documentos em que o termo t aparece)○ quanto mais raro o termo t maior o score documento

● coord: quantos dos termos buscados são encontrados no documento

○ quantos mais termos t aparecem no documento, maior o score do documento

● boost (index) : boost num campo em tempo de indexação

● boost (query) : boost no campo em tempo de busca

Relevância

Page 13: Introdução ao Solr e Faceted Search

O que é Faceted Search?

Page 14: Introdução ao Solr e Faceted Search

● Não força hierarquia de opções

○ usuário pode aplicar e remover filtros de facets em qualquer ordem

● Sem surpresas○ usuário sabe o que

esperar antes de aplicar o filtro

Faceted Search

Page 15: Introdução ao Solr e Faceted Search

● Cada busca realizada é indexada como um documento. +1milhão de buscas de usuários por dia

{ id: "10c8be8e-2d75-4c07-ad17-20ebd0a17ad2", keyword: "Organizador de Bolsa", keyword_original: "Organizador de Bolsa", user: “buyer”, page: 2, hits: 3326, time: 7,… }

● Solr pré-processa e normaliza termos de busca. ○ alianças casamento, aliança casamento, alianca casamento

● Métricas quase real time. Barato, simples e escalável (por um tempo)!

Métricas de busca

Page 16: Introdução ao Solr e Faceted Search

Indexação para Facets

● Facet é feito no valor indexado e não no stored● Indexação

○ Não tokenizado em palavras separadas○ Não mapeado para lowercase○ Humam-readable, acentuação não removida

Page 17: Introdução ao Solr e Faceted Search

● Especifica campo para facet● Cada termo indexado no campo é uma constraint● Campo deve ser indexado● Pode ser usado múltiplas vezes

Field Value Faceting

q=*:*fq = page:1facet = truefacet.field = keywordfacet.field = city

Page 18: Introdução ao Solr e Faceted Search

http://..:8983/solr/search-metrics/select?q=*:*&fq=page:1&wt=json&facet=true&facet.field=keyword&rows=0

Field Value Faceting: Resultados

facet_counts: {

facet_queries: { },

facet_fields:

{

keyword:

[

"lembrancinha", 125629,

"bebe", 106350,

"casamento", 103706,

"aniversario e festa", 102394,

"decoracao", 77442,

"lembrancinhas de aniversario",75603,

"lembrancinhas de casamento", 55003,

"bebe reborn", 42638,

"convites de casamento",42538,

"convite", 40690

….

1ª - QTime: 17502ª - QTime: 500

Page 19: Introdução ao Solr e Faceted Search

http://..:8983/solr/search-metrics/select?q=*:*&fq=page:1&fq=keyword:lembrancinha&facet=true&facet.field=sort

Field Value Faceting: Filtrando

facet_counts: {

facet_queries: { },

facet_fields:

{

sort:

[

"featured", 105081,

"relevance", 18976,

"minprice", 1245,

"maxprice", 143,

"newest", 139,

"unsorted", 30,

"oldest", 13,

"organic", 2

….

1ª - QTime: 19272ª - QTime: 13

Page 20: Introdução ao Solr e Faceted Search

● facet.prefix - Restringe à valores indexados com o prefixo.● facet.mincount = 0 - Número mínimo de contadores● facet.sort = count, index - Ordenação por quantidade ou

lexicográfica ● facet.offset = 0 - Quantos resultados devem ser escapados.● facet.limit = 100 - Número de resultados● facet.missing = false – Número de documentos sem valor

indexado

Parâmetros facet.field

Page 21: Introdução ao Solr e Faceted Search

● Especifica uma query arbitrária no formato do Lucene● Multiplas queries com restrições

Query Faceting

facet.query=time:[* TO 50]facet.query=time:[50 TO 200]facet.query=time:[200 TO *]

…facet_queries: {

time:[* TO 50]: 25985897,time:[50 TO 200]: 3273294,time:[200 TO *]: 529980

}…

Page 22: Introdução ao Solr e Faceted Search

● Cria intervalos uniformemente dimensionados● Ranges de data são especificados usando expressões

“DateMath” ● Usado em campos numéricos e data

Range Faceting

facet.range: "created_at"facet.range.start: "NOW/YEAR-1YEAR"facet.range.end: "NOW/MONTH+1MONTH"facet.range.gap: "+1DAY"

…facet_ranges: {

created_at: {

...

"2014-07-28T00:00:00Z", 1030403,

"2014-07-29T00:00:00Z", 966961,

"2014-07-30T00:00:00Z", 904438

…}

}…

Page 23: Introdução ao Solr e Faceted Search

● Filtra os resultados, mas permite preservar os resultados de facets

● Permite colocar tag no filtro ● Permite excluir certos filtros quando fizer facet

Multi-select Faceting

facet=truefq=page:1fq={!tag=kw}keyword:lembrancinhafacet.field={!ex=kw}keyword

…facet_fields: {

keyword:[ "lembrancinha", 125629,

"bebe", 106350,

"casamento", 103706,

"aniversario e festa",

102394,

"decoracao", 77442,

...

}

Page 24: Introdução ao Solr e Faceted Search

Pivot Faceting (Solr 4+)

● Realiza um facet dentro dos resultados de um facet pai

facet=truefq=page:1&facet.pivot=city,keyword

…facet_pivot: {

city_keyword: [ { field: "city",value: "são paulo",

count: 8921, pivot:

[

{

field: "keyword", value: "convites de casamento",

count: 217

},{

field: "keyword", value: "lembrancinha",

count: 140

},{

field: "keyword",value: "bebe reborn",

count: 74

},

...

Page 25: Introdução ao Solr e Faceted Search

Obrigado!

Estamos [email protected]

Blog de Engenharia craftedbits.elo7.com.br