판
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 ()); }