package com.jh.ela;
import java.io.IOException;

import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import static org.elasticsearch.index.query.QueryBuilders.*;

/**
 * Builder pattern 
 * @author ezfarm
 *
 */
import com.jh.server.Server;

public class Srcher { 
	
	String srchwrd ;             // 검색어 
	Server srvernode;
	RestHighLevelClient elanode;
	String searchIndex;  
	int size;
	int from;
	
	static public class Builder {
		
		String srchwrd   = null;
		Server srvernode = null;
		RestHighLevelClient elanode = null;
		String searchIndex = null;
		int size = 0;
		int from = 0;
		
		public Builder(String srchwrd) {
			// TODO Auto-generated constructor stub
			// 검색어 
			this.srchwrd = srchwrd;
		}
		
		/**
		 * 페이지 설정 
		 * @param size, from 
		 * @return
		 */
		public Builder withPages (int size, int from) {
			
			// server 
			this.srvernode   = new Server();
			// 검색 대상 인덱스 
			this.searchIndex = this.srvernode.searchIndex;
			this.size = size;
			this.from = from;
			
			return this;
		}
		
		public Srcher build() {
			return new Srcher(this);
		}
	}
	
	public Srcher(Builder builder) {
		
		srchwrd     = builder.srchwrd;
		srvernode   = builder.srvernode;
		elanode     = builder.srvernode.getElaserver();
		searchIndex = builder.searchIndex;
		
	}
	
	/**
	 * Client node close !!!
	 */
	public void serverDie() {
		
		try {
			
			elanode.close();
			System.out.println("client close !!!");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	// 검색 테스트
	public void fullTextSearch() {
		
		/*
		 *  "query" : {
		 *  	"size" : 180,
		 *  	"match_all": {}
		 *  }
		 */
		System.out.println("searchIndex =>  " + searchIndex);
		SearchRequest searchRequest = new SearchRequest(searchIndex);
		SearchResponse searchResponse = new SearchResponse();
		
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		searchSourceBuilder.query(matchAllQuery()); 
		searchSourceBuilder.size(180); 
		searchRequest.source(searchSourceBuilder);
		
		
		if (elanode != null) {
			System.out.println("RestHighLevel node success!!!");
		}
		
		try {
			
			searchResponse = elanode.search(searchRequest, RequestOptions.DEFAULT);
			System.out.println("status =>  " + searchResponse.status());
			SearchHits hits = searchResponse.getHits();
			
			for (SearchHit hit : hits) {
				System.out.println(hit.getSourceAsString());
			}
			
		} catch (ElasticsearchException e) {
			System.out.println(e);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println(e);
		} 
	}
}

'ELK > elasticsearch' 카테고리의 다른 글

elasticsearch SSL 적용 connect code + python  (0) 2019.10.22
logstash_01 / json  (0) 2019.10.19
elasticsearch : count  (0) 2019.05.21
elasticsearch + shell01  (0) 2019.05.11
elastic 불용어 테스트  (0) 2019.05.01