SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Solr 4: Introdução
e Faceted Search
Michel Bottan
michel.bottan@elo7.com
TDC 2014 São Paulo
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
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
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.
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
Features
● Full-text search
● Hit hightlighting
● Faceted search
● Fuzzy / Proximity search
● Near real-time indexing
● Database integration
● Rich document handling
● Geospatial search
Interface HTTP
Query e Indexação
Query Parsing
Text Analysis
Search Components
● Facets
● Filtering
● Geospatial
● Spelling
● More Like This
Caching
Admin
DIH - Data Import
Handler
Index Replication
Index
Searcher / Writer
Query Parser
Arquitetura
Pipeline indexação
{
"id":"ABC_123",
"title":"Zen zazen"
...
}
Tokenizer Filter
Documento
Post
/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
Índice invertido
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
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
● 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
O que é 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
● 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
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
● 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:1
facet = true
facet.field = keyword
facet.field = city
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: 1750
2ª - QTime: 500
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: 1927
2ª - QTime: 13
● 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
● 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
}
…
● 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
…
}
}
…
● 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=true
fq=page:1
fq={!tag=kw}keyword:lembrancinha
facet.field={!ex=kw}keyword
…
facet_fields: {
keyword:[
"lembrancinha", 125629,
"bebe", 106350,
"casamento", 103706,
"aniversario e festa",
102394,
"decoracao", 77442,
...
}
Pivot Faceting (Solr 4+)
● Realiza um facet dentro dos resultados de um facet pai
facet=true
fq=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
},
...
Obrigado!
Estamos contratando!
jobs@elo7.com
Blog de Engenharia
craftedbits.elo7.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Arley Rodrigues
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL BásicoIgor Alves
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EELoiane Groner
 
um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesWilliam Costa
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 
Quem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecQuem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecWilliam Costa
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSLMarcelo Milhomem
 

Was ist angesagt? (11)

Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Relatório
RelatórioRelatório
Relatório
 
Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1Sql - Comandos dml do mysql - parte 1
Sql - Comandos dml do mysql - parte 1
 
Treinamento de SQL Básico
Treinamento de SQL BásicoTreinamento de SQL Básico
Treinamento de SQL Básico
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EEJavaone Brazil 2012: Integrando Ext JS 4 com Java EE
Javaone Brazil 2012: Integrando Ext JS 4 com Java EE
 
um breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidadesum breve treinamento sobre SQL e suas funcionalidades
um breve treinamento sobre SQL e suas funcionalidades
 
Owasp web app_flaws
Owasp web app_flawsOwasp web app_flaws
Owasp web app_flaws
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 
Quem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe SecQuem tem medo do XSS ? MindThe Sec
Quem tem medo do XSS ? MindThe Sec
 
Autenticacao em APIs com SSL
Autenticacao em APIs com SSLAutenticacao em APIs com SSL
Autenticacao em APIs com SSL
 

Ähnlich wie Solr Faceted Search: Introdução e Case Elo7

Busca e análise de dados escalável em tempo-real
Busca e análise de dados escalável em tempo-realBusca e análise de dados escalável em tempo-real
Busca e análise de dados escalável em tempo-realAécio Santos
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPFelipe Weckx
 
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
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dadostdc-globalcode
 
Elasticsearch de dentro para fora
Elasticsearch de dentro para foraElasticsearch de dentro para fora
Elasticsearch de dentro para foraWaldemar Neto
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time Umbler
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptMarcos Artigas
 
MongoDB na Ingresse.com - TDC 2014
MongoDB na Ingresse.com - TDC 2014MongoDB na Ingresse.com - TDC 2014
MongoDB na Ingresse.com - TDC 2014Kelly Cristina
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoRicardo Longa
 

Ähnlich wie Solr Faceted Search: Introdução e Case Elo7 (20)

Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2Treinamento Elasticsearch - Parte 2
Treinamento Elasticsearch - Parte 2
 
SAAS - Search as a Service 2017
SAAS - Search as a Service 2017SAAS - Search as a Service 2017
SAAS - Search as a Service 2017
 
Busca e análise de dados escalável em tempo-real
Busca e análise de dados escalável em tempo-realBusca e análise de dados escalável em tempo-real
Busca e análise de dados escalável em tempo-real
 
BigData - ElasticSearch + PHP
BigData - ElasticSearch + PHPBigData - ElasticSearch + PHP
BigData - ElasticSearch + PHP
 
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...
 
Cloud search avancado
Cloud search avancadoCloud search avancado
Cloud search avancado
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dados
 
Elasticsearch de dentro para fora
Elasticsearch de dentro para foraElasticsearch de dentro para fora
Elasticsearch de dentro para fora
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.ppt
 
MongoDB na Ingresse.com - TDC 2014
MongoDB na Ingresse.com - TDC 2014MongoDB na Ingresse.com - TDC 2014
MongoDB na Ingresse.com - TDC 2014
 
Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Desenvolvendo produtos no UOL
Desenvolvendo produtos no UOLDesenvolvendo produtos no UOL
Desenvolvendo produtos no UOL
 
Banco de Dados Relacional Estendido
Banco de Dados Relacional EstendidoBanco de Dados Relacional Estendido
Banco de Dados Relacional Estendido
 

Solr Faceted Search: Introdução e Case Elo7

  • 1. Solr 4: Introdução e Faceted Search Michel Bottan michel.bottan@elo7.com TDC 2014 São Paulo
  • 2. 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
  • 3. 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
  • 4. 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.
  • 5. 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
  • 6. Features ● Full-text search ● Hit hightlighting ● Faceted search ● Fuzzy / Proximity search ● Near real-time indexing ● Database integration ● Rich document handling ● Geospatial search
  • 7. Interface HTTP Query e Indexação Query Parsing Text Analysis Search Components ● Facets ● Filtering ● Geospatial ● Spelling ● More Like This Caching Admin DIH - Data Import Handler Index Replication Index Searcher / Writer Query Parser Arquitetura
  • 8. Pipeline indexação { "id":"ABC_123", "title":"Zen zazen" ... } Tokenizer Filter Documento Post /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
  • 10. 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
  • 11. 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
  • 12. ● 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
  • 13. O que é Faceted Search?
  • 14. ● 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
  • 15. ● 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
  • 16. 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
  • 17. ● 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:1 facet = true facet.field = keyword facet.field = city
  • 18. 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: 1750 2ª - QTime: 500
  • 19. 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: 1927 2ª - QTime: 13
  • 20. ● 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
  • 21. ● 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 } …
  • 22. ● 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 … } } …
  • 23. ● 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=true fq=page:1 fq={!tag=kw}keyword:lembrancinha facet.field={!ex=kw}keyword … facet_fields: { keyword:[ "lembrancinha", 125629, "bebe", 106350, "casamento", 103706, "aniversario e festa", 102394, "decoracao", 77442, ... }
  • 24. Pivot Faceting (Solr 4+) ● Realiza um facet dentro dos resultados de um facet pai facet=true fq=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 }, ...
  • 25. Obrigado! Estamos contratando! jobs@elo7.com Blog de Engenharia craftedbits.elo7.com.br