2011-07-24 6 views

Respuesta

5

¿Ha intentado agregar un campo SearchIndex con esta información? P.ej.

class NoteIndex(SearchIndex, indexes.Indexable): 
    title = CharField(model_attr='title') 
    facet_model_name = CharField(faceted=True) 

    def get_model(self): 
     return Note 

    def prepare_facet_model_name(self, obj): 
     return "note" 


class MemoIndex(SearchIndex, indexes.Indexable): 
    title = CharField(model_attr='title') 
    facet_model_name = CharField(faceted=True) 

    def get_model(self): 
     return Memo 

    def prepare_facet_model_name(self, obj): 
     return "memo" 

Y así sucesivamente, simplemente devolviendo una cadena diferente para cada índice de búsqueda. También puede crear una mezcla y devolver el nombre del modelo devuelto por get_model también.

Suponiendo que ha agregado este campo a cada una de sus definiciones SearchIndex, solo chain the facet method a sus resultados.

results = form.search().facet('facet_model_name') 

Ahora el método facet_counts devolverá un diccionario con los campos facetas y contar los resultados para cada valor de las facetas, en este caso, los nombres de los modelos.

Tenga en cuenta que el campo aquí está etiquetado con detalle para evitar un posible conflicto con model_name, un campo agregado por Haystack. No tiene facetas, y no estoy seguro de si duplicarlo provocará un conflicto.

+0

¿Puede explicar cómo se usaría esto en un solo formulario de búsqueda para mostrar la facetación en varios modelos? Por ejemplo, si tuviéramos Notas, Memos y Grabaciones, cómo cada uno con su propio Índice, ¿cómo puedo hacer que FacetedSearchForm muestre facetas en estos distintos modelos? –

+0

¿Quiere decir cada uno con su propia definición de SearchIndex? – bennylope

+1

Esperemos que las ediciones de la explicación anterior ayuden. – bennylope

0

The Docs tienen un muy buen recorrido para esto.

El mínimo que necesita:

  1. es añadir faceted=True a los parametros de su campo model_names.
  2. Reconstruya su esquema y sus índices.
  3. agrega .facet('model_names') a cualquier SearchQuerySet que quieras facetar.

Más explicaciones sobre la pregunta permitirían una respuesta más completa.

Cuestiones relacionadas