2015-05-13 71 views
6

Tìm kiếm Hibernate sắp xếp các kết quả tùy thuộc vào độ liên quan, nó là bình thường. Ngoài ra, nếu hai tài liệu có cùng số điểm, chúng được sắp xếp theo các khóa chính của chúng.Hibernate Tìm kiếm sắp xếp

Ví dụ:

book1: id = 1, bookTitle = "hibernate search by example".

book2: id = 2, BOOKTITLE = "ngủ đông tìm kiếm trong hành động"

Nếu tôi làm một truy vấn để tìm kiếm thuật ngữ "ngủ đông tìm kiếm", tôi sẽ phải theo thứ tự: Book1 sau đó book2

Tôi muốn đảo ngược thứ tự này: book2 rồi book1. Có nghĩa là đảo ngược thứ tự khóa chính. Có cách nào để thực hiện điều này mà không cần triển khai một sự tương tự tùy chỉnh? Đồng thời giữ trật tự liên quan.

Trả lời

7

Có, bạn cần tạo đối tượng Sort chỉ định sắp xếp mong muốn và đặt nó trong truy vấn của bạn. Xem Section 5.1.3.3 of the Hibernate docs. Sau đó, trong danh sách SortFields vượt qua SortField.FIELD_SCORE. Hàm tạo của SortField cũng cho phép bạn đảo ngược thứ tự.

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

Nếu tôi sử dụng đối tượng Sắp xếp, tôi có giữ thứ tự chấm điểm tìm kiếm ngủ đông không? Trong ví dụ trên, nếu tôi tìm kiếm "tìm kiếm hibernate", một tài liệu có id = 3 chỉ chứa cụm từ "hibernate" sẽ được sắp xếp thứ ba sau id = 2 và id = 1? Ngay cả khi tôi đảo ngược thứ tự Id? –

+0

Tôi nói điều này vì tôi đã thử ("id", SortField.LONG, true), nó hoạt động tốt nhưng thứ tự chỉ phụ thuộc vào id chứ không phải trên id và điểm tài liệu –

+0

Đó là lý do tại sao 'SortField' đầu tiên trong Sort ctor cần là 'SortField.FIELD_SCORE'. Điều đó nói với nó để sắp xếp theo điểm số đầu tiên. – femtoRgon

Các vấn đề liên quan