ES 배포 및 프로그램 개발
11992 단어 ElasticSearch검색 엔진ES 데모
배경 설명:
시스템 검색 홍보 활동은 이전의 데이터베이스가 모호하게 일치하는 방식에서 검색엔진으로 전환하는 방식이다. 선택한 내용은 ElasticSearch를 위주로 한다. 본 문서에는 ES를 이용하여 단일 노드를 배치하고 ES 검색을 개발하는 코드 설명이 기록되어 있으며 마지막으로 일부 코드를 올려 참고할 수 있다.
시스템 환경:
배포 환경: CentOS 6.7 + JDK 1.7 + ElasticSearch 2.3.5
개발 환경: Windows 10 + JDK 1.7 + IDEA 2017
환경 준비:
통합 POM 의존성:
org.apache.commons
commons-lang3
3.4
org.springframework.data
spring-data-elasticsearch
2.0.4.RELEASE
org.elasticsearch
elasticsearch
2.3.5
org.aspectj
aspectjrt
1.7.1
org.aspectj
aspectjweaver
1.7.1
log4j
log4j
1.2.17
com.alibaba
fastjson
1.2.17
Spring 구성을 추가하려면 다음과 같이 하십시오.
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/data/elasticsearch
http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd
">
데이터 엔티티를 만들고 데이터 필드에 일일이 대응하여 빠른 조회에 사용합니다.
public class AppPOJO {
private int res_pk;
private String res_kaipk;
private String res_name;
// getter setter
}
VO 엔티티를 만들고 필요한 경우 데이터 엔티티를 비즈니스 엔티티로 변환하고 다음을 반환합니다.
@Document(indexName = "testidex",type = "estype")
public class AppModel {
@Id
private Integer appId; private String resName;
// getter setter
}
검색 기능 개발:
1. 데이터 계층:
기본 데이터 기반 제공, 기본 CRUD 작업 포함:
새로운 기능의 핵심 구현:
String pid = et.index(new IndexQueryBuilder()
// index
.withIndexName(ESConst.ESIndexEnum.APPSEARCH.getName())
// Type
.withType(ESConst.ESTypeEnum.APPSEARCH.getName())
// ID,
.withId("" + pojo.getRes_pk())
//
.withSource(jsonData)
.build()
);
2. 수정 기능 핵심 실현
IndexRequest indexRequest = new IndexRequest();
indexRequest.source(jsonData);
UpdateQuery updateQuery = new UpdateQueryBuilder()
.withIndexName(ESConst.ESTypeEnum.APPSEARCH.getName())
.withType(ESConst.ESTypeEnum.APPSEARCH.getName())
.withId(""+pojo.getRes_pk())
.withIndexRequest(indexRequest)
.withClass(AppPOJO.class)
.build();
et.update(updateQuery);
3. 삭제 기능 핵심 실현
DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setQuery(QueryBuilders.termQuery("appId", ""+appUid));
deleteQuery.setIndex(ESConst.ESIndexEnum.APPSEARCH.getName());
deleteQuery.setType(ESConst.ESTypeEnum.APPSEARCH.getName());
et.delete(deleteQuery);
4. 메인 키에 따라 조회
StringQuery query = new StringQuery(
QueryBuilders.termQuery("appId",appUid).toString()
);
AppPOJO appPOJO = et.queryForObject(query,AppPOJO.class);
여기서 반드시 주의해야 할 것은 이 API를 사용할 때 실체 모델에 대해 주석 표시를 해야 한다는 것이다. 상세한 것은 코드를 참조한다.
5. 모든 데이터를 조회하고 첫 페이지 전시에 사용하며 핵심 코드는 다음과 같다.
// Scan ,
//
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(ESConst.ESIndexEnum.APPSEARCH.getName())
.withTypes(ESConst.ESTypeEnum.APPSEARCH.getName())
.withQuery(QueryBuilders.matchAllQuery())
.withFilter(QueryBuilders.termQuery("res_online","y"))
.withPageable(new PageRequest(0,1)).build();
// ,
String scrollId = et.scan(searchQuery, 1000, false);
//
Page page = et.scroll(scrollId, 5000L,AppPOJO.class);
List content = null;
if(page.hasContent()){
content = page.getContent();
}else{
break;
}
6. 조회의 총 데이터를 얻는데 주로 프론트 데스크톱 페이지의 페이지 나누기에 사용된다.
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withIndices(ESConst.ESIndexEnum.APPSEARCH.getName())
.withTypes(ESConst.ESTypeEnum.APPSEARCH.getName())
.withQuery(QueryBuilders.multiMatchQuery(condition
,"column1","column2"))
.build();
long count = et.count(searchQuery);
이상과 같이 모든 데이터 층의 기초 API가 완성되었고 나머지 업무 코드는 사람마다 업무가 다르기 때문에 저는 일일이 공유하지 않겠습니다. 여러분은 스스로 보충할 수 있습니다.
마지막으로 상술한 것은 모두 핵심 코드입니다. 저는 프로젝트 테스트 코드를 첨부 파일에 보내서 여러분께 공유할 것입니다.
4
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
spring-data-elasticsearch 페이지 조회부록: 1. 이름에서 알 수 있듯이QueryBuilder는 검색 조건, 필터 조건을 구축하는 데 사용되고 SortBuilder는 정렬을 구축하는 데 사용된다. 예를 들어 우리는 어느 위치에서 100미터 범위 내의 모...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.