04-springboot 통합elasticsearch 초식 - 간단한 삭제 수정 및 복잡한 정렬, 페이지 나누기, 집합 조작
홈페이지 관련 문서 주소:https://www.elastic.co/guide/en/elasticsearch/client/java-api/7.x/java-docs-delete-by-query.html
spring boot에서 제공하는 Elasticsearch의 데이터 조회:https://docs.spring.io/spring-data/elasticsearch/docs/4.0.1.RELEASE/reference/html/#repositories.definition
1. 간단한 조작
앞에서 es의 간단한 사용을 소개했는데 지금 정리하면 일반적인 업무 사용에서 사용하는 삭제와 검사 기능을 사용할 수 있다.
ElasticsearchRepository 인터페이스를 상속하여 제공된 템플릿 방법으로 작업합니다.Abstract Elasticsearch Repository 클래스는 자주 사용하는 삭제 검사 방법을 봉인해 주었습니다. 우리는 호출하기만 하면 됩니다.
본질도springboot에서 제공하는es의 조작 클래스를 통해 조작한다.eg:
@Override
public Page findAll(Pageable pageable) {
SearchQuery query = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withPageable(pageable).build();
return elasticsearchOperations.queryForPage(query, getEntityClass());
}
private void createIndex() {
elasticsearchOperations.createIndex(getEntityClass());
}
private void putMapping() {
elasticsearchOperations.putMapping(getEntityClass());
}
1. 신규 및 수정
모두 봉인된 index 방법으로 조작합니다.
@Test
public void updateEntity(){
Person person = Person.builder().id("66666").name(" ya!!!").age(19).build();
Person p = repository.index(person);
p= repository.findById("66666").get();
log.info("=========================== {} ==================",p);
}
2. 조회 방법
ElasticSearch :
findAll()
findById()
findAllById()
count();
Page search(QueryBuilder query, Pageable pageable)
3. 삭제하는 방법
public void deleteById(ID id)
public void delete(T entity)
deleteAll(Iterable extends T> entities)
2. 복잡한 작업
실제 사용에서 비교적 복잡한 업무와 관련될 수 있기 때문에 복잡한 업무 상황에서 ES가 자바에서 어떻게 조작하는지 알아야 한다
1. 정렬
springboot도 정렬의 봉인을 제공하지만, 주의해야 할 것은text를 정렬할 수 없고, 숫자나 자모만 정렬할 수 있다는 것이다.이외에 실체 클래스에 주해 @Field(fielddata=true)를 추가하려면 Sort 클래스는 관련 클래스와 API 문서를 볼 수 있는 정렬 관련 필드 방법을 제공합니다.
public void getList(){
Sort order = Sort.by(new Sort.Order(Sort.Direction.DESC, "age"));
Iterable all = repository.findAll(order);
for (Person person : all) {
log.info("==============={}================",person);
}
}
2. 페이지 나누기
repository 저장소에서 제공하는 검색 방법
@Test
public void getPageList() throws JsonProcessingException {
// PageRequest age = PageRequest.of(1, 10, Sort.Direction.ASC, "age");
PageRequest of = PageRequest.of(1, 10);
MatchAllQueryBuilder query = QueryBuilders.matchAllQuery();
Page all = repository.findAll(of);
Page search = repository.search(query, of);
log.info("==============={}================", JsonMapperUtil.toString(all));
log.info("==============={}================", JsonMapperUtil.toString(search));
}
es java API 조회 방법
NativeSearchQuery nq = new NativeSearchQueryBuilder().withPageable(of).build();
Page people = operations.queryForPage(nq, Person.class);
3. 집합 작업
관련 질의
@Test
public void getSortList(){
TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("by_country").field("country")
.subAggregation(AggregationBuilders.dateHistogram("by_year")
.field("dateOfBirth")
.subAggregation(AggregationBuilders.avg("avg_children").field("children"))
);
NativeSearchQuery query = new NativeSearchQueryBuilder().addAggregation(aggregationBuilder).build();
List people = operations.queryForList(query, Person.class);
}
최소/최대/평균값
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.