2015-05-13 15 views
6

La ricerca di sospensione è ordinata in base alla pertinenza, è normale. Inoltre, se due documenti hanno lo stesso punteggio, vengono ordinati in base alle loro chiavi primarie.Hibernate Ricerca ordinamento

Per esempio,

Book1: id = 1, BOOKTITLE = "ibernare ricerca per esempio".

book2: id = 2, BOOKTITLE = "hibernate ricerca in azione"

Se sto facendo una query per cercare i termini "hibernate ricerca", avrei questo ordine: Book1 poi book2

Vorrei invertire questo ordine: book2 quindi book1. Ciò significa invertire l'ordine delle chiavi primarie. Esiste un modo per farlo senza implementare una somiglianza personalizzata? Allo stesso tempo, mantenere l'ordine di rilevanza.

risposta

7

Sì, è necessario creare un oggetto Sort che specifica l'ordinamento desiderato e impostarlo nella query. Vedi Section 5.1.3.3 of the Hibernate docs. Quindi, nell'elenco di SortFields passare SortField.FIELD_SCORE. Il costruttore di SortField ti consente anche di invertire l'ordine.

org.hibernate.search.FullTextQuery query = s.createFullTextQuery(luceneQuery, MyEntity.class); 
org.apache.lucene.search.Sort sort = new Sort(
    SortField.FIELD_SCORE, 
    new SortField("id", SortField.STRING, true)); 
query.setSort(sort); 
List results = query.list(); 
+0

Se utilizzo un oggetto Sort, mantengo l'ordine di punteggio della ricerca in modalità ibernazione? Nell'esempio sopra, se cerco "hibernate search", un documento con id = 3 che contiene solo il termine "hibernate" verrebbe ordinato terzo dopo id = 2 e id = 1? Anche se inverto l'ordine Id? –

+0

Ho detto questo perché ho provato ("id", SortField.LONG, true), funziona bene ma l'ordine dipende solo dall'ID e non dall'ID e dal punteggio del documento –

+0

Ecco perché il primo 'SortField' nel Sort ctor deve essere 'SortField.FIELD_SCORE'. Questo dice di ordinare prima per punteggio. – femtoRgon

Problemi correlati