2013-07-03 21 views
6

Mi chiedo come ordinare i gruppi in un risultato Solr. Voglio ordinare i gruppi per numFound. Ho visto come ordinare i gruppi in base al punteggio here, ma ciò non sembrava fare la differenza negli esempi che ho visto e non è esattamente quello che volevo.come ordinare i gruppi per conteggio in solr

Nell'xml è possibile vedere il numero per gruppo come numFound e questo è quello che voglio ordinare i gruppi, quindi ad esempio potrei vedere il gruppo più grande in alto.

<arr name="groups"> 
<lst> 
<str name="groupValue">top secret</str> 
<result name="doclist" numFound="12" start="0"> 
... 

Qualsiasi consiglio apprezzato! Grazie!

risposta

0

L'ordinamento sul numFound non è possibile poiché numFound non è un campo in Solr.
Controllare il discussion menzionando che non è supportato e non ho trovato un JIRA aperto per il problema pure.

0

Non possibile dall'ultima volta che ho esaminato questo.

0

è possibile ordinare utilizzando i campi

consideri un esempio:

Se si dispone di 5 facce e contare ad esso associati. Quindi è possibile ordinare utilizzando i COUNTS di ciascun campo.

Può essere applicabile ai campi normali/senza sfaccettature.

public class FacetBean implements Category,Serializable { 



private String facetName; //getter , setters 
private long facetCount; // getter , setters 


public FacetBean(String facetName, long count,) { 

    this.facetName = facetName; 
    this.count = count; 
}} 

tuo metodo di chiamata dovrebbe essere così

private List<FacetBean> getFacetFieldsbyCount(QueryResponse queryResponse) 
{ 
    List<FacetField> flds = queryResponse.getFacetFields(); 
    List<FacetBean> facetList = new ArrayList<FacetBean>(); 
    FacetBean facet = null; 
    if (flds != null) { 
     for (FacetField fld : flds) { 
      facet = new FacetBean(); 
      facet.setFacetName(fld.getName()); 

      List<Count> counts = fld.getValues(); 

      if (counts != null) { 

       for (Count count : counts) { 
        facet.setFacetCount(count.getCount()); 
       } 
      } 
      facetList.add(facet); 
     } 
    } 

    Collections.sort(facetList,new Comparator<FacetBean>() { 

     public int compare(FacetBean obj1, FacetBean obj2) { 

      if(obj1.getFacetCount() > obj2.getFacetCount()) { 
       return (int)obj1.getFacetCount(); 
      } else { 
       return (int)obj2.getFacetCount(); 
      } 
     } 
    }); 

    return facetList; 
} 

nella stessa URL Hanno detto qualcosa di simile.

sorta -> es: per esempio, sorta = popolarità disc farà sì che i gruppi siano ordinati in base alla più alta popolarità doc

group.sort -> è possibile applicare il campo qui .

Spero che aiuti.

1

Questa è una vecchia domanda, ma è possibile con due query.

Prima domanda: riporta il campo che stai raggruppando come una serie di aspetti per il tuo stato di navigazione. Puoi limitare il numero di record restituiti a 0 qui: hai solo bisogno delle faccette. Il numero di facet che si restituisce dovrebbe essere la dimensione della pagina.

group_id: 
    23 (6) 
    143:(3) 
     5:(2) 

Seconda richiesta: deve essere per i record, quindi non è richiesta alcuna sfaccettatura. La query deve essere una query OR per i valori del campo facet restituiti dalla prima query. (id_gruppo: 23 O id_gruppo: 143 O id_gruppo: 5 e così via) ed essere raggruppato dall'ID che si è utilizzato per il raggruppamento.

Ordinamento: riordinare i record dalla query 2 in modo che corrispondano all'ordine dalla query 1.

Questo lo farà, a condizione che non sono sicuro di quanto sia scalabile quella query OR. Se stai cercando di impaginare, ricorda che puoi sfalsare le faccette: usalo come meccanismo invece di compensare i record.

Problemi correlati