Elasticsearch 기초:springboot 통합 elasticsearch

5028 단어

1,springboot 통합 elasticsearch


1.1,pom 파일 도입

        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
        

1.2, 프로필 응용 프로그램.xml 가입

   #  
spring.data.elasticsearch.cluster-name=elasticsearch
   #  , 9300 , !
spring.data.elasticsearch.cluster-nodes=10.1.109.163:9300
   #  
spring.data.elasticsearch.local=false
    #  
spring.data.elasticsearch.repositories.enabled=true

2,springboot에서 elasticsearch를 호출하는 다양한 방식


2.1 사용 대상 방식, mybatis와 유사한 처리

  • 2.1.1, 새 DAO 객체
  • import lombok.Getter;
    import lombok.Setter;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.elasticsearch.annotations.Document;
    
    @Document(indexName = "es-customer", type = "customer", shards = 2, replicas = 1, refreshInterval = "-1")
    @Getter
    @Setter
    public class Customer {
        @Id
        private String id;
        private String firstName;
        private String lastName;
    
        @Override
        public String toString() {
            return String.format("Customer[id=%s, firstName='%s', lastName='%s']", this.id,
                    this.firstName, this.lastName);
        }
    }
    
    
  • 2.1.2 새 Repository 대상 Elasticsearch Repository 인터페이스에서 자주 사용하는 인터페이스는save,findAll,delete,index,search 등 자주 사용하는 인터페이스에서 사용자 정의 방법을 포함하고, 방법명에 T의 필드 이름 조회 키워드는find...By,read...By,query...By,count...By,and get...By를 포함하며, 직접 And Or로 연결할 수 있는 익숙합니다
  • import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    import java.util.List;
    
    public interface CustomerRepository extends ElasticsearchRepository  {
        public List findByFirstName(String firstName);
        public Page findByLastName(String lastName, Pageable page);
        public List findByFirstNameAndLastName(String firstName,String lastName);
    }
    

    그 중에서 페이지 나누기 Pageable의 구조 방법은 다음과 같다. Pageable pageable = new PageRequest(pageNumber, pageSize).추가 사용 방법 참조:https://github.com/spring-projects/spring-data-elasticsearchspring-data-elasticsearch – 실전 사례 상세 설명(4)
    이렇게 하면 autowired를 사용하여 Repository 실례 @Autowired private Customer Repository repository를 주입할 수 있다.

    2.2 TransportClient를 사용하여 ES 작업


    @Autowired private TransportClient transportClient;
  • 2.2.1, 색인 추가
  • IndexResponse indexResponse = transportClient  
                    .prepareIndex(index, type, "3").setSource(source).get();  
    System.out.println(indexResponse.getVersion());  
    

    그 중에서 source는 jsonString, Map, XContentBuilder 등의 대상이 될 수 있다
  • 2.2.2 인덱스 업데이트
  • UpdateResponse updateResponse = transportClient  
                    .prepareUpdate(index, type, "6").setDoc(source).get();  
    System.out.println(updateResponse.getVersion());  
    
  • 2.2.3, 색인 삭제
  • DeleteResponse deleteResponse = transportClient.prepareDelete(index,  
                    type, id).get();  
    System.out.println(deleteResponse.getVersion());  
    
  • 2.2.4, 검색 인덱스

  • Id 기반 질의
    GetResponse getResponse = transportClient.prepareGet(index, type, "1").get();  
    System.out.println(getResponse.getSourceAsString());  
    

    복잡한 조건 조회 SearchResponse
            SearchResponse searchResponse = transportClient.prepareSearch("es-customer")
                    .setTypes("customer")
                    .setQuery(QueryBuilders.matchAllQuery()) // 
                    //.setQuery(QueryBuilders.matchQuery("name", "tom").operator(Operator.AND)) // tom name, or
                    //.setQuery(QueryBuilders.multiMatchQuery("tom", "name", "age")) // 
                    //.setQuery(QueryBuilders.queryString("name:to* AND age:[0 TO 19]")) // , 0 19
                    //.setQuery(QueryBuilders.termQuery("name", "tom"))// 
                    .setSearchType(SearchType.QUERY_THEN_FETCH)
                    .setFrom(0).setSize(10)// 
                    .addSort("lastName", SortOrder.DESC)// 
                    .get();
            SearchHits hits = searchResponse.getHits();
            long total = hits.getTotalHits();
            System.out.println(total);
            SearchHit[] searchHits = hits.hits();
            for(SearchHit s : searchHits)
            {
                System.out.println(s.getSourceAsString());
            }
    

    참고


    스프링-boot 통합elasticsearch 및 그 간단한 응용
    https://github.com/whiney/springboot-elasticsearch https://github.com/adalaohu/springboot-elasticSearch
    Elasticsearch 노트 5의 자바 작업
    2. Elasticsearch의 기능, 사용 장면과 특징
    https://github.com/spring-projects/spring-data-elasticsearch

    좋은 웹페이지 즐겨찾기