1
1
package com .madadipouya .elasticsearch .springdata .example .service .impl ;
2
2
3
- import com .madadipouya .elasticsearch .springdata .example .service .exception .BookNotFoundException ;
4
3
import com .madadipouya .elasticsearch .springdata .example .model .Book ;
5
4
import com .madadipouya .elasticsearch .springdata .example .repository .BookRepository ;
6
5
import com .madadipouya .elasticsearch .springdata .example .service .BookService ;
6
+ import com .madadipouya .elasticsearch .springdata .example .service .exception .BookNotFoundException ;
7
7
import com .madadipouya .elasticsearch .springdata .example .service .exception .DuplicateIsbnException ;
8
+ import org .elasticsearch .index .query .BoolQueryBuilder ;
9
+ import org .elasticsearch .index .query .QueryBuilders ;
10
+ import org .springframework .data .elasticsearch .core .ElasticsearchTemplate ;
11
+ import org .springframework .data .elasticsearch .core .query .NativeSearchQueryBuilder ;
8
12
import org .springframework .stereotype .Service ;
9
13
10
14
import java .util .ArrayList ;
@@ -16,8 +20,11 @@ public class DefaultBookService implements BookService {
16
20
17
21
private final BookRepository bookRepository ;
18
22
19
- public DefaultBookService (BookRepository bookRepository ) {
23
+ private final ElasticsearchTemplate elasticsearchTemplate ;
24
+
25
+ public DefaultBookService (BookRepository bookRepository , ElasticsearchTemplate elasticsearchTemplate ) {
20
26
this .bookRepository = bookRepository ;
27
+ this .elasticsearchTemplate = elasticsearchTemplate ;
21
28
}
22
29
23
30
@ Override
@@ -37,6 +44,13 @@ public List<Book> findByAuthor(String authorName) {
37
44
return bookRepository .findByAuthorName (authorName );
38
45
}
39
46
47
+ @ Override
48
+ public List <Book > findByTitleAndAuthor (String title , String author ) {
49
+ BoolQueryBuilder criteria = QueryBuilders .boolQuery ();
50
+ criteria .must ().addAll (List .of (QueryBuilders .matchQuery ("authorName" , author ), QueryBuilders .matchQuery ("title" , title )));
51
+ return elasticsearchTemplate .queryForList (new NativeSearchQueryBuilder ().withQuery (criteria ).build (), Book .class );
52
+ }
53
+
40
54
@ Override
41
55
public Book create (Book book ) throws DuplicateIsbnException {
42
56
if (getByIsbn (book .getIsbn ()).isEmpty ()) {
0 commit comments