SpringBootでJestを使用してESデータベースにアクセスし、ESクラスタにアクセス


多くの場合、1つのプロジェクトがリレーショナル・データベース(Mysqlなど)だけでなく、非リレーショナル・データベースにも使用される可能性があります.その中でElasticSearchは優れています.RestAPIを使用してElasticSearchにアクセスすることは、間違いなく可能な方法です.
もちろんESデータベースへのアクセスに成功するには、いくつかのステップが必要です.
一、プロジェクトに関連する依存を追加する
		
			org.springframework.boot
			spring-boot-starter-data-elasticsearch
		

Jestの依存関係もあります
		
			io.searchbox
			jest
		

二、Jestを配置する
		spring:
		    elasticsearch:
				jest:
				connection-timeout: 3000
				multi-threaded: true
				uris: http://xxx.xx.xxx.xxx:9200
				read-timeout: 7200

アクセスアドレスはサーバアドレスであり、ポートのデフォルトは9200(変更は除外されません)であり、その他の関連属性も必要に応じて自分で設定できます.
三、ESデータベースへのアクセス
import com.google.gson.JsonObject;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.Search;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;

/**
 * @Author Kolloge
 * @Project esdemo
 * @Date 2018/11/13  10:00
 * @Description 
 **/
@Service("esService")
public class EsInfoImpl implements EsInfo {
    private final Logger logger = LoggerFactory.getLogger(EsInfoImpl.class);

    @Value("${es.index}")
    private String indexName;

    @Value("${es.type}")
    private String typeName;

    @Autowired
    private JestClient jestClient;

    @Override
    public JsonObject searchInformation(String id) {
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchQuery("       keyname",id));
        Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(indexName).addType(typeName).build();
        try{
            JestResult jestResult = jestClient.execute(search);
            logger.info("  ES    !");
            return  jestResult.getJsonObject();

        }catch (SearchESException | IOException e){
            logger.error("  ES    :" + e.getMessage());
            return null;
        } catch (Exception e){
            logger.error("  ES    :" + e.getMessage());
            e.printStackTrace();
            return null;
        }
    }
}

ここのindex_nameとtype_nameは自分の状況に応じて設定する必要があります.ここにinterfaceは貼られていないので、必ず自分でimplに基づいてinterfaceを書きます.
注意すべきことは、ここでの結果JsonObjectはgsonのフォーマットであるため、gsonの依存を追加する必要がある可能性があることです.
		
			com.google.code.gson
			gson
			2.8.5
		

Jsonを手に入れたら自然に使いたいように使いました.エンティティに結果を直接挿入する場合は、SpringBootの下でJestがElasticSearchクエリの結果をエンティティオブジェクトに直接書き込む
四、クラスタアクセスの方法
実際には、前のステップですべての操作が終了し、プログラムは正常にESデータベースにアクセスし、関連するデータを取得することができます.しかし、ESは1台のサーバだけでなく、一般的にクラスタ構築されていることが多い.では、このような場合、どのように操作すればいいのでしょうか.
実は以上の配置は完全にクラスタのESデータベースにアクセスすることができて、配置ファイルを変えるだけで簡単に第2歩の操作を修正することができます:
		spring:
		    elasticsearch:
				jest:
				connection-timeout: 3000
				multi-threaded: true
				uris:
				- http://xxx.xx.xxx.xxx:9200
				- http://yyy.xx.xxx.xxx:9200
				read-timeout: 7200

いくらでもURIを入れて、クラスタアクセスも便利です.全体の実現もかなり簡単です.