Skip to content

Commit 8a2a009

Browse files
added more query
1 parent 50329e0 commit 8a2a009

File tree

2 files changed

+57
-15
lines changed

2 files changed

+57
-15
lines changed

src/main/java/com/elk/spring/controller/AccountController.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,18 @@
22

33
import java.util.List;
44

5-
import org.elasticsearch.index.query.QueryBuilder;
6-
import org.elasticsearch.index.query.QueryBuilders;
7-
import org.elasticsearch.index.query.RangeQueryBuilder;
85
import org.springframework.beans.factory.annotation.Autowired;
96
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
10-
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
117
import org.springframework.web.bind.annotation.GetMapping;
128
import org.springframework.web.bind.annotation.PathVariable;
139
import org.springframework.web.bind.annotation.RestController;
1410

1511
import com.elk.spring.pojo.Accounts;
1612
import com.elk.spring.repository.AccountRepository;
1713
import com.elk.spring.service.AccountService;
18-
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
19-
import lombok.extern.log4j.Log4j2;
2014

2115
@RestController
22-
@Log4j2
16+
2317
public class AccountController {
2418
@Autowired
2519
ElasticsearchOperations esTemplate;
@@ -46,4 +40,22 @@ public List<Accounts> saveCustomer(@PathVariable String name) throws Exception {
4640
return service.findByFirstNameLastName(name);
4741

4842
}
43+
44+
@GetMapping("/find/{field}/{name}")
45+
public List<Accounts> wildCardQuery(@PathVariable String field, @PathVariable String name) throws Exception {
46+
return service.wildCardQuery(field, name);
47+
48+
}
49+
50+
@GetMapping("/findDisQuery/{name}")
51+
public List<Accounts> disMaxQuery(@PathVariable String name) throws Exception {
52+
return service.disMaxQuery(name);
53+
54+
}
55+
56+
@GetMapping("/filterByBalance/{from}/{to}")
57+
public List<Accounts> filterByBalance(@PathVariable double from, @PathVariable double to) throws Exception {
58+
return service.getResultByFilter(from, to);
59+
60+
}
4961
}

src/main/java/com/elk/spring/service/AccountService.java

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,24 @@
22

33
import java.util.List;
44

5-
import org.apache.lucene.util.QueryBuilder;
5+
import org.apache.lucene.search.TermQuery;
66
import org.elasticsearch.common.unit.Fuzziness;
77
import org.elasticsearch.index.query.BoolQueryBuilder;
8+
import org.elasticsearch.index.query.DisMaxQueryBuilder;
89
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
910
import org.elasticsearch.index.query.QueryBuilders;
11+
import org.elasticsearch.index.query.WildcardQueryBuilder;
1012
import org.springframework.beans.factory.annotation.Autowired;
1113
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
1214
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
1315
import org.springframework.stereotype.Service;
1416

1517
import com.elk.spring.pojo.Accounts;
1618
import com.elk.spring.repository.AccountRepository;
19+
import static org.elasticsearch.index.query.QueryBuilders.termQuery;
1720

1821
@Service
22+
1923
public class AccountService {
2024

2125
@Autowired
@@ -30,20 +34,46 @@ public void check() {
3034

3135
public List<Accounts> findByFirstName(String name) {
3236
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
33-
.must(QueryBuilders.matchQuery("firstname", name).fuzziness("AUTO"));
37+
.must(QueryBuilders.matchQuery("firstname", name).fuzziness(Fuzziness.AUTO));
3438

35-
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryBuilder);
36-
List<Accounts> users = template.queryForList(nativeSearchQuery, Accounts.class);
37-
return users;
39+
return generateResult(queryBuilder);
3840

3941
}
4042

4143
public List<Accounts> findByFirstNameLastName(String name) {
42-
44+
// find query on multiple fields
4345
MultiMatchQueryBuilder builder = QueryBuilders.multiMatchQuery(name, "firstname", "lastname")
4446
.fuzziness(Fuzziness.AUTO);
47+
48+
return generateResult(builder);
49+
}
50+
51+
public List<Accounts> wildCardQuery(String field, String name) {
52+
// wildcard query
53+
WildcardQueryBuilder wildcardQuery = QueryBuilders.wildcardQuery(field, name + "*");
54+
return generateResult(wildcardQuery);
55+
}
56+
57+
public List<Accounts> getResultByFilter(double from, double to) {
58+
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
59+
60+
.filter(QueryBuilders.rangeQuery("balance").gt(from).lt(to));
61+
62+
return generateResult(queryBuilder);
63+
64+
}
65+
66+
public List<Accounts> disMaxQuery(String name) {
67+
// condition 1 or condition 2
68+
DisMaxQueryBuilder disMaxQueryBuilder = QueryBuilders.disMaxQuery().add(termQuery("firstname", name))
69+
.add(termQuery("lastname", name));
70+
71+
return generateResult(disMaxQueryBuilder);
72+
}
73+
74+
private List<Accounts> generateResult(org.elasticsearch.index.query.QueryBuilder builder) {
4575
NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(builder);
46-
List<Accounts> users = template.queryForList(nativeSearchQuery, Accounts.class);
47-
return users;
76+
77+
return template.queryForList(nativeSearchQuery, Accounts.class);
4878
}
4979
}

0 commit comments

Comments
 (0)