2010-10-28 14 views
8

/select/?q=*:*&rows=100&facet=on&facet.field=categorySOLR - Cómo tener un recuento de las facetas restringidas a hileras de resultados devuelto en

tengo alrededor de 100 000 documentos indexados. Pero devuelvo solo 100 documentos usando rows = 100. Los recuentos de facetas se devolvieron por categoría, sin embargo, devuelve los recuentos de todos los documentos indexados.

¿Podemos de alguna manera restringir las facetas al conjunto de resultados devuelto? es decir, ¿solo 100 filas?

+0

posible duplicado de [¿Cómo filtrar los resultados según el orden en Solr?] (Http://stackoverflow.com/questions/1997783/how-to-filter-results-based-on-order-in-solr) –

+2

En caso de que te lo estés preguntando, lakh == 100 miles. –

Respuesta

1

Lo siento, pero no creo que sea posible. Las facetas siempre se basan en todos los documentos que coinciden con la consulta.

+0

Creo que esta es la respuesta a mi consulta, y de hecho es muy desafortunado que esta característica aún no se haya implementado en SOLR. Los hacks detallados en la otra pregunta vinculada anteriormente tampoco son realmente dignos, en un servidor de producción con enormes datos. Agradeceríamos que los creadores de SOLR puedan implementar esta característica en el futuro cercano – user489895

0

No es una respuesta real, pero tal vez mejor que nada: los resultados función de agrupación (hora de salida desde el tronco!):

http://wiki.apache.org/solr/FieldCollapsing

donde facet.field = categoría es entonces similar a group.field = categoría ¡y obtendrás solo la misma cantidad de grupos ('facetas') que has especificado!

0

Si siempre ejecuta la misma consulta (q=*:*), tal vez usted puede utilizar facet.limit, por ejemplo:

select/?q=*:*&rows=100&facet=on&facet.field=category&facet.limit=100 

nos dicen si el orden en que Solr utiliza es la misma en la faceta como en la consulta :.

+1

Para responder primero a su pregunta, sí, el orden es el mismo en la faceta que en la consulta. Sin embargo, aquí no podemos usar facet.limit como facet.limit solo limita el número de facetas a devolver. No limita el resultado. Por lo tanto, select /? Q = *: * & rows = 100 & facet = on & facet.field = category & facet.limit = 100 solo devolverá 100 valores de categoría. No limitará el resultado a 100, como es el requisito aquí. – user489895

+0

votado como facet.limit solo restringe el número de facetas devueltas, no las filas sobre las que se actúa, como se señala en el comentario anterior – Simon

5

No creo que sea posible de manera directa, como lo señaló Pascal.

puedo ver dos formas de conseguirlo:

  1. Método I: Hacer el escrutinio el visitar los 100 resultados devueltos. Esto es muy fácil y rápido si son campos categóricos, pero es más difícil si son campos de texto que necesitan ser tokens, etc.

  2. Método II: hacer dos pases:

    1. realizar una consulta normal sin facetas (solo necesita solicitar identificadores de documento en este punto)
    2. Recopilar todas las ID de los documentos devueltos
    3. Hacer una segunda consulta para todos los campos y facetas, agregando un filtro para restringir el resultado a los ID recopilados en setp 2 Algo así como:
      select/?q=:&facet=on&facet.field=category&fq=id:(312 OR 28 OR 1231 ...)

El primero es mucho más eficiente y lo recomendaría para archivos no textuales. El segundo es computacionalmente costoso, pero tiene la ventaja de funcionar para todos los tipos de campos od.

Cuestiones relacionadas