conferencia 4: queries
TRANSCRIPT
!
Queries
queries
consultas
/collection1/select?q=*:*
SearchHandler
SELECT * FROM collection1
• Petición HTTP: Incluye la petición de búsqueda y los parámetros.
• Interfaz en la administración de Solr.
• SolrJ y demás librerías en distintos lenguajes.
• Respuestas en diferentes formatos
Parámetros básicoslos parámetros pueden ser definidos en el archivo
solrconfig.xml o mediante la URL.
qPetición con formato campo:valor (petición del usuario)
startIndica el documento (posición) a partir del cual se va retornar
rowsIndica la cantidad de documentos a devolver
dfCampo de búsqueda por defecto
flIndica los campos que se van a devolver (list separada por comas)
fqSimilar a q utilizado para “filtrar” la búsqueda (resultados cacheados).
sort
Define un orden basado en un campo (descarta la relevancia) formato campo desc|asc.
http://localhost:8983/solr/collection1/select?q=uci&start=1&rows=20&fl=i
d,name
Wildcards
term* sustituye cualquier número de caraceteres
t?rm sustituye la ocurrencia de 1 único caracter
AND, &&, + term1 AND term2, term1 && term2, +term1 +term2
OR, || term1 || term2, term1 OR term2, term1 term2
NOT, - term1 -term2, term1 NOT term2
Rangos, boosting, fuzzy
Rangosfield:[A to B]
Fechasdate:[NOW-1YEAR TO *]
Numéricosdate:[100 TO *]
Boostingname:pepe^10 AND alias:pepe^2
Fuzzyname:”A B”~4
Encontrar las ocurrencias de A a 4 “posiciones” de B
Highlighting
hl=trueActiva el highlighting (resaltado)
hl.flIndica sobre que campos se va a resaltar
hl.simple.preetiquetas utilizadas para la apertura y cierre de cada fragmento.
hl.simple.post
Facets
La búsqueda facetada permite a los usuarios ver subconjuntos de resultados
agrupados por determinado campo
La ventaja de los facets en Solr es que son calculados y generados en base al
criterio de búsqueda del usuario y basados en un campo determinado.
Field faceting
facet=trueActiva el componente de facetado para la petición en concreto.
facet.field=name
Indica el campo sobre el que se desea facetas (obtienen valores para los conjuntos)
http://localhost:8983/solr/collection1/select?
q=*:*&facet=true&facet.field=name{ "facet_counts":{ "facet_queries":{}, "facet_fields":{ "name":[ "Starbucks",6, "McDonalds",5, "Pizza Hut",3, "Red Lobster",3, "Freddy's Pizza Shop",1, "Sprig",1, "The Iberian Pig",1 ]}, "facet_dates":{}, "facet_ranges":{} } }
Field faceting - avanzadofacet.sort
Ordena las facetas por mayor cantidad de ocurrencias (count) o por el orden lexicográfico (index).
facet.limit
Limita el número máximo de facetas a obtener.
facet.mincount
Determina el número mínimo de documentos con el valor de facetado que deben existir para que sea considerada una faceta válida.
facet.prefix
Limita el valor de las facetas a sólo aquellas que comienza con el prefijo especificado.
facet.missingEspecifica si se debe devolver o no un contador con el total de documentos que no tienen un valor para el campo facetado.
facet.offset
Indica la posición a partir de la cual se desea obtener el listado de afacetado (útil para paginado).
¡En muchos casos los parámetros anteriores pueden ser especificados
para cada campo! !
utilizando la sintaxis: f.campo.facet.opción=valor
http://localhost:8983/solr/collection1/select?q=*:*&
facet=true& facet.mincount=1& facet.field=state& f.state.facet.limit=50& f.state.facet.sort=index& facet.field=name& f.name.facet.mincount=2& facet.field=tags& f.tags.facet.limit=5
"facet_fields":{ "state":[ "California",4, "Georgia",6, "Illinois",2, "New York",4, "South Carolina",1, "Texas",3 ], "name":[ "Starbucks",6, "McDonalds",5, "Pizza Hut",3, "Red Lobster",3, "Freddy's Pizza Shop",1, "Sprig",1, "The Iberian Pig",1], "tags":[ "breakfast",11, "coffee",11, "sit-down",8, "fast food",5, "hamburgers",5] }
state
name
tags
Query facetingfacet.query
Acepta una query (similar al parámetro q) cada consulta se utilizará para generar una faceta (bucket).
http://localhost:8983/solr/collection1/select?q=*:*&
facet=true& facet.query=price:[* TO 5]& facet.query=price:[5 TO 10]& facet.query=price:[10 TO 20]& facet.query=price:[20 TO 50]& facet.query=price:[50 TO *]
"response":{ "numFound":20, "start":0, "docs":[] }, "facet_counts":{ "facet_queries":{ "price:[* TO 5}":6, "price:[5 TO 10}":5, "price:[10 TO 20}":3, "price:[20 TO 50}":6, "price:[50 TO *]":0},
las facetas (buckets) son nuestras queries.
¡problema! los identificadores de las facetas son las queries
http://localhost:8983/solr/collection1/select?q=*:*&
facet=true& facet.query={!key=“<$5”}price:[* TO 5]& facet.query={!key=“$5<$10”}price:[5 TO 10]& facet.query={!key=“<$10<$20”}price:[10 TO 20]& facet.query={!key=“<$20<$50”}price:[20 TO 50]& facet.query={!key=“>$50”}price:[50 TO *]
{!key=“>$50”} indica un nombre de una faceta
http://localhost:8983/solr/collection1/select?q=*:*&
facet=true& facet.field={!key=“Location”}city& facet.query={!key=“<$5”}price:[* TO 5]& facet.query={!key=“$5<$10”}price:[5 TO 10]& facet.query={!key=“<$10<$20”}price:[10 TO 20]& facet.query={!key=“<$20<$50”}price:[20 TO 50]& facet.query={!key=“>$50”}price:[50 TO *]
renombrar un campo
Range facetingfacet.range
Se le indica el campo sobre el que se realizará el facetado. facet.range.start=0
Valor inicialfacet.range.end=50
Valor final del último bucket.
facet.range.gap=5
Indica el incremento que se utilizará para generar cada bucket, por ejemplo si el valor inicial es 0 y el gap es de 5, los buckets generados serían: 0, 5, 10, 15, etc.
http://localhost:8983/solr/collection1/select?q=*:*&
facet=true& facet.range=price& facet.range.start=0& facet.range.end=50& facet.range.gap=5 !
"response":{ "numFound":20, "start":0, "docs":[] }, "facet_counts":{ "facet_ranges":{ "price":{ "counts": [ "0.0",6, "5.0",5, "10.0",0, "15.0",3, "20.0",2, "25.0",2, "30.0",1, "35.0",0, "40.0",0, "45.0",1 ], "gap":5.0, "start":0.0, "end":50.0} }}}
los buckets son generados automáticamente
Página Query de la interfaz
interfaz visual para varias de las opciones anteriores
Facetado para aplicaciones de analítica