javaAPI 를 사용 하여 elasticsearch 를 조작 합 니 다.

1. 클 라 이언 트 만 들 기
1. 자바 인 코딩 을 통 해 클 라 이언 트 만 들 기
elasticsearch 클 라 이언 트 는 자바 작업 elasticsearch 의 핵심 대상 입 니 다. 예 를 들 어 색인 생 성, 색인 추가, 색인 삭제 등 모든 작업 이 이 대상 의 api 가 실 행 됩 니 다.
//      

Settings settings = Settings.settingsBuilder().put("client.transport.sniff", true)

.put("client.transport.ping_timeout", ping_timeout, TimeUnit.SECONDS)

.put("client.transport.nodes_sampler_interval", nodes_sampler_interval,

TimeUnit.SECONDS)

.put("cluster.name", Cluster_Name).build();

/ / 파일 settings 설정 을 통 해 elasticsearch 의 Client 클 라 이언 트 elasticsearchClient = TransportClient. builder (). settings (settings). build () 를 만 듭 니 다.
/ / elasticsearch 와 소통 할 포트 를 추가 하 는 것 이 좋 습 니 다.elasticsearch 서비스 와 직접 접촉 하 는 기본 포트 는 9200 이 고 클 라 이언 트 통신 을 사용 하 는 포트 번 호 는 9300 입 니 다.
((TransportClient) elasticsearchClient).addTransportAddress(
 new InetSocketTransportAddress(new InetSocketAddress(ES_HOST, ES_TCP_PORT)));

2. 색인 추가 작업
1. 단일 색인 추가
IndexRequestBuilder 에서 색인 을 추가 하 는 핵심 대상 을 만 듭 니 다. 이 대상 을 만 들 때 색인 이름 Index, 유형 명 Type, 문서 필드 의 id 를 만 들 고 색인 으로 추 가 된 필드 를 설정 합 니 다. 이 대상 은 성 과 를 만 듭 니 다.
//    

IndexRequestBuilder prepareIndex = esClient.prepareIndex(indexConfiguration.getIndexName(), indexConfiguration.getIndexType(),

Long.toString(message.getEsId()));

//       xml          

XContentBuilder mapping = XContentFactory.jsonBuilder();

mapping.startObject(); //  field  

Map filedCfg = indexConfiguration.getFieldCfg();

Map map = JSONUtils.toMap(message);

for(Map.Entry entry:map.entrySet()){

String key = entry.getKey();

if(filedCfg.containsKey(key)){

String source = filedCfg.get(key).getSource();

Object obj = map.get(source);

//    

mapping.field(source,obj);

}

}

mapping.endObject(); //  field  

prepareIndex.setSource(mapping);

prepareIndex.execute().actionGet();

return prepareIndex;

2、      

        BulkRequestBuilder  ,       

       IndexRequestBuilder     ,                   。

//1、        

BulkRequestBuilder bulkrequest = esClient.prepareBulk().setRefresh(true);

IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();

//2、    (             ,       )

eSHelp.beginBulkOperation(parseXmlByXMlConfigure());

//       

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(200,

200, Constants.ES.REBUILD.KEEPALIVETIME, TimeUnit.MILLISECONDS,

new ArrayBlockingQueue(20), new ThreadPoolExecutor.CallerRunsPolicy());

//         

AtomicLong counter = new AtomicLong();

//           

long startTime = System.currentTimeMillis();

//3、   IndexRequestBuilder                   

List list = getList();

for(UserMessage message :list){

//         

IndexRequestBuilder indexRequestBuilder = addIndexRequestBuilder(message,indexConfiguration);

bulkrequest.add(indexRequestBuilder);

//4、         

if(bulkrequest.numberOfActions()>=200){

threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));

//          

bulkrequest = esClient.prepareBulk();

}

}

//          

if(bulkrequest.numberOfActions()>0){

threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));

//          

bulkrequest = esClient.prepareBulk();

}

threadPool.shutdown();

threadPool.awaitTermination(24, TimeUnit.HOURS);

eSHelp.endBulkOperation(parseXmlByXMlConfigure());

System.out.println("          :"+counter.get());


3. 검색 작업
검색 작업 은 그 중에서 가장 중요 하고 복잡 한 작업 입 니 다. 핵심 클래스 인 SearchRequestBuilder 는 다양한 검색 유형 을 구성 하여 검색 합 니 다. 그 중에서 구체 적 인 검색 인 터 페 이 스 는 Query Builder, elasticsearch 는 Query Builders 를 제공 하여 풍부 한 Query Builder 대상 을 구성 하여 조회 합 니 다.조 회 는 페이지, 하 이 라이트 등 조작 을 할 수 있다.
IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();

int pageNumer = 10; //  

int pageSize = 20; //      

//      

SearchRequestBuilder searchRequestBuilder = esClient.prepareSearch(indexConfiguration.getIndexName())

.setTypes(indexConfiguration.getIndexType()).setSearchType(SearchType.QUERY_THEN_FETCH)

.setExplain(false).setFrom((pageNumer - 1) * pageSize).setSize(pageSize);

//    

//QueryBuilder query = new MatchQueryBuilder("message", "   ");

//     

//QueryBuilder query = new MultiMatchQueryBuilder("  ", "message");

//                  

QueryBuilder query = new TermQueryBuilder("message", " ");

searchRequestBuilder.setQuery(query);

SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();

List messages = ESUtils.recallSearchResult(searchResponse, UserMessage.class);

System.out.println("  :"+messages.size());

System.out.println(JSON.toJSON(messages));

//QueryBuilders       API                    ,       


4. 삭제 작업
1. 단일 기록 삭제
기록 을 삭제 하려 면 deleteRequestBuilder 대상 을 구축 하고 해당 하 는 기록 id 를 만들어 삭제 해 야 합 니 다. 코드 는 다음 과 같 습 니 다.
IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();

//  id  document  

DeleteRequestBuilder drb = esClient.prepareDelete(indexConfiguration.getIndexName(),

indexConfiguration.getIndexType(), String.valueOf(9999));

DeleteResponse dr = drb.execute().actionGet();

2. 여러 기록 삭제
색인 을 대량으로 추가 하 는 것 과 유사 하 며, BulkRequestBuilder 대상 을 사용 하여 여러 개의 DeleteRequestBuilder 를 추가 하고 스 레 드 풀 을 통 해 병행 처리 해 야 합 니 다.코드 는 다음 과 같 습 니 다:
1、              

BulkRequestBuilder bulkrequest = esClient.prepareBulk().setRefresh(true);

IndexConfiguration indexConfiguration = parseXmlByXMlConfigure();

2、    (             ,       )

eSHelp.beginBulkOperation(parseXmlByXMlConfigure());

//       

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(200,

200, Constants.ES.REBUILD.KEEPALIVETIME, TimeUnit.MILLISECONDS,

new ArrayBlockingQueue(20), new ThreadPoolExecutor.CallerRunsPolicy());

//         

AtomicLong counter = new AtomicLong();

//           

long startTime = System.currentTimeMillis();

3、   IndexRequestBuilder                   

List list = getList();

for(UserMessage message :list){

//    

DeleteRequestBuilder deleteRequestBuilder = esClient.prepareDelete(indexConfiguration.getIndexName(),

indexConfiguration.getIndexType(), String.valueOf(message.getEsId()));

bulkrequest.add(deleteRequestBuilder);

//4、         

if(bulkrequest.numberOfActions()>=200){

threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));

//          

bulkrequest = esClient.prepareBulk();

}

}

//          

if(bulkrequest.numberOfActions()>0){

threadPool.execute(new ESHelp.BulkRequestTask(bulkrequest, counter, list.size(), startTime));

//          

bulkrequest = esClient.prepareBulk();

}

threadPool.shutdown();

threadPool.awaitTermination(24, TimeUnit.HOURS);

eSHelp.endBulkOperation(parseXmlByXMlConfigure());

System.out.println("          :"+counter.get());

좋은 웹페이지 즐겨찾기