Skip to content

Instantly share code, notes, and snippets.

@chathurangat
Created December 28, 2018 05:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chathurangat/fe08e27907970eac6d66f464d4d09e09 to your computer and use it in GitHub Desktop.
Save chathurangat/fe08e27907970eac6d66f464d4d09e09 to your computer and use it in GitHub Desktop.
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