Skip to content

Commit 202b87b

Browse files
committed
[HSEARCH] hsearch-elasticsearch-wikipedia: Allow to sort by title
1 parent f7cd5a4 commit 202b87b

File tree

6 files changed

+39
-6
lines changed

6 files changed

+39
-6
lines changed

hibernate-search/hsearch-elasticsearch-wikipedia/README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,13 @@ For instance:
7474
curl http://localhost:8080/page/search/?q=car
7575
```
7676

77-
Finally, you can retrieve a page with:
77+
You can also select the sort (either `RELEVANCE` or `TITLE`):
78+
79+
```
80+
curl http://localhost:8080/page/search/?q=car&s=TITLE
81+
```
82+
83+
Finally, you can retrieve a Wikipedia page with:
7884

7985
```
8086
curl http://localhost:8080/page/<page ID>/

hibernate-search/hsearch-elasticsearch-wikipedia/src/main/java/org/hibernate/search/demos/wikipedia/data/Page.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
import javax.persistence.SequenceGenerator;
1010

1111
import org.hibernate.annotations.Type;
12+
import org.hibernate.search.engine.backend.types.Sortable;
1213
import org.hibernate.search.mapper.pojo.dirtiness.ReindexOnUpdate;
1314
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.FullTextField;
1415
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.Indexed;
1516
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.IndexedEmbedded;
1617
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.IndexingDependency;
18+
import org.hibernate.search.mapper.pojo.mapping.definition.annotation.KeywordField;
1719

1820
@Entity
1921
@Indexed(index = "page")
@@ -26,6 +28,7 @@ public class Page {
2628

2729
@Basic(optional = false)
2830
@FullTextField(analyzer = "cleaned_text")
31+
@KeywordField(name = "title_sort", normalizer = "cleaned_keyword", sortable = Sortable.YES)
2932
private String title;
3033

3134
@Basic(optional = false)

hibernate-search/hsearch-elasticsearch-wikipedia/src/main/java/org/hibernate/search/demos/wikipedia/data/dao/PageDao.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ public interface PageDao {
1313

1414
Page getById(Long id);
1515

16-
SearchResult<Page> search(String term, int offset, int limit);
16+
SearchResult<Page> search(String term, PageSort sort, int offset, int limit);
1717

1818
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Hibernate Search, full-text search for your domain model
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.search.demos.wikipedia.data.dao;
8+
9+
public enum PageSort {
10+
11+
RELEVANCE,
12+
TITLE
13+
14+
}

hibernate-search/hsearch-elasticsearch-wikipedia/src/main/java/org/hibernate/search/demos/wikipedia/data/dao/hibernate/HibernatePageDaoImpl.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.hibernate.search.demos.wikipedia.data.Page;
44
import org.hibernate.search.demos.wikipedia.data.dao.PageDao;
5+
import org.hibernate.search.demos.wikipedia.data.dao.PageSort;
56
import org.hibernate.search.demos.wikipedia.util.SearchResult;
67
import org.hibernate.search.mapper.orm.Search;
78
import org.hibernate.search.mapper.orm.jpa.FullTextEntityManager;
@@ -35,7 +36,7 @@ public Page getById(Long id) {
3536

3637
@Override
3738
@SuppressWarnings("unchecked")
38-
public SearchResult<Page> search(String term, int offset, int limit) {
39+
public SearchResult<Page> search(String term, PageSort sort, int offset, int limit) {
3940
FullTextEntityManager fullTextEm = Search.getFullTextEntityManager( getEm() );
4041

4142
FullTextQuery query = fullTextEm.search( Page.class ).query()
@@ -52,7 +53,15 @@ public SearchResult<Page> search(String term, int offset, int limit) {
5253
.toPredicate();
5354
}
5455
} )
55-
.sort( f -> f.byScore() )
56+
.sort( f -> {
57+
switch ( sort ) {
58+
case TITLE:
59+
f.byField( "title_sort" );
60+
case RELEVANCE:
61+
default:
62+
f.byScore();
63+
}
64+
} )
5665
.build();
5766

5867
query.setFirstResult( offset )

hibernate-search/hsearch-elasticsearch-wikipedia/src/main/java/org/hibernate/search/demos/wikipedia/endpoint/PageEndpoint.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import org.hibernate.search.demos.wikipedia.data.Page;
2323
import org.hibernate.search.demos.wikipedia.data.dao.PageDao;
24+
import org.hibernate.search.demos.wikipedia.data.dao.PageSort;
2425
import org.hibernate.search.demos.wikipedia.dto.PageInputDto;
2526
import org.hibernate.search.demos.wikipedia.dto.PageOutputDto;
2627
import org.hibernate.search.demos.wikipedia.dto.mapper.PageMapper;
@@ -76,11 +77,11 @@ public PageOutputDto getById(@PathParam("id") Long id) {
7677

7778
@GET
7879
@Path("/search")
79-
public SearchResult<PageOutputDto> search(@QueryParam("q") String queryString, @QueryParam("p") Integer page) {
80+
public SearchResult<PageOutputDto> search(@QueryParam("q") String queryString, @QueryParam("s") PageSort sort, @QueryParam("p") Integer page) {
8081
if ( page == null ) {
8182
page = 0;
8283
}
83-
SearchResult<Page> searchResult = dao.search( queryString, page * ITEMS_PER_PAGE, ITEMS_PER_PAGE );
84+
SearchResult<Page> searchResult = dao.search( queryString, sort, page * ITEMS_PER_PAGE, ITEMS_PER_PAGE );
8485

8586
return new SearchResult<>(
8687
searchResult.getTotalCount(),

0 commit comments

Comments
 (0)