04-springboot 통합elasticsearch 초식 - 간단한 삭제 수정 및 복잡한 정렬, 페이지 나누기, 집합 조작

4199 단어
앞에서 elasticsearch의 데이터 저장과 데이터 조회를 대충 이해했습니다.지금 es의 복잡한 조작을 배워 보세요.
홈페이지 관련 문서 주소: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. 조회 방법

  • 앞에서 소개한 근거, 방법명 키워드는 자동으로 json을 생성한다
  • @Query로 조회하는 방법
  • Elasticsearch에서 제공하는 방법을 사용합니다
  • 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);
        }
    
    

    최소/최대/평균값

    좋은 웹페이지 즐겨찾기