봄 부팅 集成 elasticsearch

java1.8의 elasticsearch6.8 스프링 boot2.1.4의 ik6.8

치어
< 의존성 > 
    < 의 groupId > org.springframework.boot </ 의 groupId > 
    < artifactId를 > 스프링 부팅 스타터 데이터 elasticsearch </ artifactId를 > 
</ 의존성 >

 

비정상적인 시작

중첩 예외 java.lang.IllegalStateException이다 availableProcessors 이미 거부 [4]로 설정된다 [4]

삽입 다음 시작 코드를 기반으로

정적 {
       System.setProperty를 ( " es.set.netty.runtime.available.processors " , " 거짓 " );
    }
DAO

DAO는 ElasticsearchRepository을 상속 

 

 

 패키지 스캔 시작 클래스 추가

@EnableElasticsearchRepositories (basePackages = { "com.aipinto.ams.esdao"})
인덱스 매핑 만들기

엔티티 클래스에서 사용

패키지 com.aipinto.ams.dmo.elasticsearch을;

수입 org.elasticsearch.common.geo.GeoPoint;
수입 org.springframework.data.annotation.Id;
수입 org.springframework.data.elasticsearch.annotations.Document;
수입 org.springframework.data.elasticsearch.annotations.Field;
수입 org.springframework.data.elasticsearch.annotations.FieldType;
수입 org.springframework.data.elasticsearch.annotations.GeoPointField;

수입 은 java.util.List;

// 대문자 타입에서 인덱스 데이터베이스 이름은 쉽게 대문자 사용하지 않는 재생되지 않습니다
@Document (INDEXNAME = "호텔"유형 = "문서" )
 공개  수업 ElasticsearchHotelDmo {
    
    @Id // 대응 ESID
    @Field (유형 = 정확한 검색 또는 정렬 키워드를 사용 // 필드 FieldType.Keyword), 디폴트 인덱스없는
     개인 문자열 언급 한 ID 위, 
    (유형의 @Field = FieldType.Text, 분석기 = "ik_max_word" // 텍스트가 자동으로 색인) , 분석기 최소 미세도 IK 단어 토크 나이 여기에 지정된
     개인 문자열 브랜드;

    
    @Field (유형 = FieldType.Text, 분석기 = "ik_max_word" // ES는 배열을 지원하지만, 동일한 유형 유지하기 위해)
     개인 목록 <문자열> 키워드;

    @GeoPointField
    개인 GeoPoint의 오시는; // ES 위도와 경도 검색 지원

    
    @Field (유형 = FieldType.Long)
     개인 롱 가격;


    @Field (타입 = FieldType.Integer)
     개인 정수 SystemSort;

}

인덱스 및지도 만들기

    @Resource
      개인 ElasticsearchTemplate elasticsearchTemplate을;

    @테스트
     공공  무효 시험 () {
        elasticsearchTemplate.createIndex (ElasticsearchHotelDmo. 클래스 );
        elasticsearchTemplate.putMapping (ElasticsearchHotelDmo. 클래스 );
    }
추가
elasticsearchHotelDao.save (ElasticsearchHotelDmo)
삭제
elasticsearchHotelDao.deleteById ();
검색 인터페이스 서비스
개인  무효 serach는 ()는 {
         // 빌드 기본 검색 자 
        NativeSearchQueryBuilder QueryBuilder는 = 새로운 새로운 NativeSearchQueryBuilder을 ();
         // 부울 쿼리를 많은 조건 
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery ();
         // 해야 또는 동등한 관계, 메커니즘 termQuery입니다 : 일치하는 토큰로 바로 이동합니다. 
        boolQuery.should (QueryBuilders.termQuery ( "", "" ));
         // matchQuery 메커니즘은 다음과 같습니다 필드 유형을 분석하고, 그래서 첫 번째 단어는, 경기에 가면 여부를 먼저 확인;하지 않을 경우, 다음 경기로 직접 이동
         // boolQuery.should (QueryBuilders.matchQuery ( "", ""));
         // boolQuery.filter (); // 필터 제균
         //boolQuery.must (); // MUST 동등한와 관계
         // boolQuery.mustNot (); // 포함되지해서는 안 
        queryBuilder.withQuery (boolQuery를);
         // withFilter 정합 필터의 검색 지점에서 geoDistanceQuery 위치 매퍼 필드 이름을 (더블에게 북 이중 경도) 위도 경도로 경도 측정 거리 (문자열 거리 DistanceUnit 부) 의 거리 단위 유닛으로부터 
        queryBuilder.withFilter (QueryBuilders.geoDistanceQuery ( "LOCATION"). 포인트. (1 ,. 1) .distance를 ( ". 3" , DistanceUnit.KILOMETERS ));
         // 이 필드를 검색 할 이름 매퍼 안타로 withQuery 일반 쿼리 정렬 rangeQuery (문자열 이름) 영역 검색보다 LTE 이상을 얻거나 GE의보다 크거나보다 적은 LT 동일 
        queryBuilder.withQuery (QueryBuilders.rangeQuery ( "가격") GTE을. (100) .lte (500 ));
         //withSort 종류 fieldSort (문자열 필드) 필드 정렬 열 순서 (SORTORDER 순서) 오름차순 또는 내림차순 
        queryBuilder.withSort (SortBuilders.fieldSort ( "SystemSort" ) .order (SortOrder.DESC));
         // (INT 페이지의 탭 PageRequest, INT 사이즈)이 페이지 번호 ES의 첫 페이지 아니다 0.1 
        queryBuilder.withPageable (PageRequest.of (0, 10 ));
         // 결과 
        페이지 <ElasticsearchHotelDmo> 검색 = elasticsearchHotelDao.search (queryBuilder.build ());
    }

 

 

추천

출처www.cnblogs.com/adfaf/p/12133873.html