2015-05-13 36 views
6

Hazırda bekletme arama sonuçları alaka düzeyine bağlı olarak sıralamak normaldir. Buna ek olarak, iki belge aynı puana sahipse, birincil anahtarları tarafından sıralanırlar. ÖrneğinHazırda Bekletme Arama sıralaması

,

book1: id = 1 BOOKTITLE = "Örneğin aramayı hazırda bekleme".

book2: id = 2, BOOKTITLE =

Ben kelimeleri arayın "arama hazırda bekletme" için bir sorgu yapıyorum, ben bu emri olurdu "eylem arama hazırda bekletme": book1 sonra book2

Bu sıralamayı tersine çevirmek istiyorum: book2 sonra book1. Bu, birincil anahtar sırasını ters çevirmek anlamına gelir. Özel Bir Benzerlik uygulamadan bunu yapmanın bir yolu var mı? Aynı zamanda alaka düzeyini koruyarak.

cevap

7

Evet, istediğiniz sıralamayı belirten ve sorgunuza göre ayarlayan bir Sort nesnesi oluşturmanız gerekir. Bakınız Section 5.1.3.3 of the Hibernate docs. Ardından, SortFields listesinde SortField.FIELD_SCORE'u geçin. SortField'ın kurucusu ayrıca siparişi tersine çevirmenize izin verir.

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

Bir Sort nesnesini kullanırsam, hazırda bekletme aramasının puanlama sırasını tutuyor muyum? Yukarıdaki örnekte, "hazırda bekletme aramasını" ararsam, yalnızca "hibernate" terimini içeren id = 3 olan bir belge, id = 2 ve id = 1'den sonra üçüncü sıraya dizilirdi? Siparişi tersine çevirmesem bile mi? –

+0

Bunu denedim çünkü ("id", SortField.LONG, true), iyi çalışıyor, ancak sipariş sadece id üzerinde ve id üzerinde değil ve belge puanına bağlı –

+0

Bu yüzden Sort ctor'daki ilk 'SortField'ın sıralanması gerekiyor. SortField.FIELD_SCORE 'olun. Bu, ilk önce skoruna göre sıralamasını söyler. – femtoRgon

İlgili konular