SpringBootでJestを使用してESデータベースにアクセスし、ESクラスタにアクセス
3582 ワード
多くの場合、1つのプロジェクトがリレーショナル・データベース(Mysqlなど)だけでなく、非リレーショナル・データベースにも使用される可能性があります.その中でElasticSearchは優れています.RestAPIを使用してElasticSearchにアクセスすることは、間違いなく可能な方法です.
もちろんESデータベースへのアクセスに成功するには、いくつかのステップが必要です.
一、プロジェクトに関連する依存を追加する
Jestの依存関係もあります
二、Jestを配置する
アクセスアドレスはサーバアドレスであり、ポートのデフォルトは9200(変更は除外されません)であり、その他の関連属性も必要に応じて自分で設定できます.
三、ESデータベースへのアクセス
ここのindex_nameとtype_nameは自分の状況に応じて設定する必要があります.ここにinterfaceは貼られていないので、必ず自分でimplに基づいてinterfaceを書きます.
注意すべきことは、ここでの結果JsonObjectはgsonのフォーマットであるため、gsonの依存を追加する必要がある可能性があることです.
Jsonを手に入れたら自然に使いたいように使いました.エンティティに結果を直接挿入する場合は、SpringBootの下でJestがElasticSearchクエリの結果をエンティティオブジェクトに直接書き込む
四、クラスタアクセスの方法
実際には、前のステップですべての操作が終了し、プログラムは正常にESデータベースにアクセスし、関連するデータを取得することができます.しかし、ESは1台のサーバだけでなく、一般的にクラスタ構築されていることが多い.では、このような場合、どのように操作すればいいのでしょうか.
実は以上の配置は完全にクラスタのESデータベースにアクセスすることができて、配置ファイルを変えるだけで簡単に第2歩の操作を修正することができます:
いくらでもURIを入れて、クラスタアクセスも便利です.全体の実現もかなり簡単です.
もちろん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を入れて、クラスタアクセスも便利です.全体の実現もかなり簡単です.