Created
December 28, 2018 05:32
-
-
Save chathurangat/fe08e27907970eac6d66f464d4d09e09 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.elasticsearch.index.query.MultiMatchQueryBuilder; | |
import org.elasticsearch.index.query.QueryBuilder; | |
import org.elasticsearch.index.query.QueryBuilders; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; | |
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; | |
import org.springframework.data.elasticsearch.core.query.SearchQuery; | |
import org.springframework.web.bind.annotation.*; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.Optional; | |
@RestController | |
public class UserController { | |
private UserRepository userRepository; | |
private ElasticsearchTemplate template; | |
@Autowired | |
public UserController(UserRepository userRepository, ElasticsearchTemplate template) { | |
this.userRepository = userRepository; | |
this.template = template; | |
} | |
@PostMapping("/users") | |
public User create(@RequestBody User user) { | |
return userRepository.save(user); | |
} | |
@PostMapping("/load-data") | |
public void addTestData() { | |
List<User> users = new ArrayList<>(); | |
User user1 = User.builder() | |
.id(1L) | |
.country("LK") | |
.description("developing web applications with java") | |
.experiences("java backend development") | |
.build(); | |
User user2 = User.builder() | |
.id(2L) | |
.country("LK") | |
.description("developing web applications with javascript") | |
.experiences("with any javascript framework") | |
.build(); | |
User user3 = User.builder() | |
.id(3L) | |
.country("SG") | |
.description("developing web applications with java") | |
.experiences("java backend development") | |
.build(); | |
User user4 = User.builder() | |
.id(4L) | |
.country("SG") | |
.description("developing web applications with javascript") | |
.experiences("with any javascript framework") | |
.build(); | |
User user5 = User.builder() | |
.id(5L) | |
.country("LK") | |
.description("developing web applications with javascript. but i love to do java programming") | |
.experiences("with any javascript framework") | |
.build(); | |
User user6 = User.builder() | |
.id(6L) | |
.country("LK") | |
.description("no experience with programming. i dont know java") | |
.experiences("eat, sleep and continue ") | |
.build(); | |
users.add(user1); | |
users.add(user2); | |
users.add(user3); | |
users.add(user4); | |
users.add(user5); | |
users.add(user6); | |
userRepository.saveAll(users); | |
} | |
@GetMapping("/users") | |
public List<User> getAll() { | |
List<User> users = new ArrayList<>(); | |
userRepository.findAll().forEach(users::add); | |
return users; | |
} | |
@DeleteMapping("/users") | |
public void deleteAll() { | |
userRepository.deleteAll(); | |
} | |
@DeleteMapping("/users/{user_id}") | |
public void delete(@PathVariable("user_id") Long userId) { | |
Optional<User> userOptional = userRepository.findById(userId); | |
userOptional.ifPresent(userRepository::delete); | |
} | |
@GetMapping("/search") | |
public List<User> search1(@RequestParam("text") String text) { | |
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(text) | |
.field("description") | |
.field("experiences") | |
.type(MultiMatchQueryBuilder.Type.BEST_FIELDS); | |
SearchQuery searchQuery = new NativeSearchQueryBuilder() | |
.withQuery(queryBuilder) | |
.build(); | |
return template.queryForList(searchQuery, User.class); | |
} | |
@GetMapping("/search2") | |
public List<User> search2(@RequestParam("text") String text) { | |
QueryBuilder stringQueryBuilder = QueryBuilders.queryStringQuery("*" + text + "*") | |
.field("description") | |
.field("experiences"); | |
SearchQuery searchQuery = new NativeSearchQueryBuilder() | |
.withQuery(stringQueryBuilder) | |
.build(); | |
return template.queryForList(searchQuery, User.class); | |
} | |
@GetMapping("/search3") | |
public List<User> search3(@RequestParam("text") String text, @RequestParam("country") String country) { | |
//building the initial query | |
QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(text) | |
.field("description") | |
.field("experiences") | |
.type(MultiMatchQueryBuilder.Type.BEST_FIELDS); | |
//adding the initial query with filter | |
QueryBuilder boolQueryBuilder = QueryBuilders.boolQuery() | |
.must(queryBuilder) | |
.filter(QueryBuilders.queryStringQuery(country).field("country")); | |
SearchQuery searchQuery = new NativeSearchQueryBuilder() | |
.withQuery(boolQueryBuilder) | |
.build(); | |
return template.queryForList(searchQuery, User.class); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment