Springboo統合bboss-elasticsearch elasticsearchクライアントの実現
8266 ワード
コンテンツの概要
まず、本明細書で実装する内容を説明します.
1.bboss-elasticsearchとspringbootが持つspring-boot-starter-data-elasticsearchの長所と短所を比較する.データベースデータの全量、増分をelasticsearchサーバにインポートする場合3.EXcel、word、ppt、pdfなどのファイルをelasticsearchサーバに解析する.jsonファイル生成によりmapping 5を生成する.jsonファイルによるコンテンツ検索6を実現する.jsonファイルによるドキュメントのハイライトクエリー
1.bboss-elasticsearchとspring-boot-starter-data-elasticsearchの長所と短所
まずspring-boot-starter-data-elasticsearchについてお話しします.Springbootは独自で、シームレスに互換性があり、操作が簡単で、JSP操作データベースのようにelasticsearchサーバを操作することができますが、これは簡単なクエリーにすぎません.実際のアプリケーションでは、あまり単純なクエリーはありません(単純なクエリーであればesを使う必要もないでしょう).複雑なクエリーであれば、大量のコードロジックが必要で、理解が難しい.
bboss-elasticsearchは国産オープンソースフレームワークであり、query dsl構文操作と分散検索エンジンelasticsearchへのアクセスに基づくo/r mapping高性能開発ライブラリであり、下位層はes restful apiに基づいてmybatisのようにデータesサーバを操作することができます.
個人的にはbboss-elasticsearchsには2つのメリットがあると思います.1.操作データベースのインタフェースを提供し、データソースを追加しなくてもデータの全量、増分インポートを実現できる.オリジナルのquery、dsl文を使用すると、友好度が高く、学習と交流が便利になります.コードの読み取り可能性が高い.
2.bboss-elasticsearchの統合
本プロジェクトは6.2.4バージョンを使用しているため、6.0.2バージョンのjarパッケージを使用し、その他のesバージョンはElasticsearch Bboss開発ドキュメントを参照してください.
2.1関連構成
2.2非同期バッチ同期は、プロジェクトの開始に適用され、インデックスインポート関連データ を作成する.
2.3タイミングインクリメンタル同期
2.4 officeドキュメントの内容をesに同期する
未完待機
まず、本明細書で実装する内容を説明します.
1.bboss-elasticsearchとspringbootが持つspring-boot-starter-data-elasticsearchの長所と短所を比較する.データベースデータの全量、増分をelasticsearchサーバにインポートする場合3.EXcel、word、ppt、pdfなどのファイルをelasticsearchサーバに解析する.jsonファイル生成によりmapping 5を生成する.jsonファイルによるコンテンツ検索6を実現する.jsonファイルによるドキュメントのハイライトクエリー
1.bboss-elasticsearchとspring-boot-starter-data-elasticsearchの長所と短所
まずspring-boot-starter-data-elasticsearchについてお話しします.Springbootは独自で、シームレスに互換性があり、操作が簡単で、JSP操作データベースのようにelasticsearchサーバを操作することができますが、これは簡単なクエリーにすぎません.実際のアプリケーションでは、あまり単純なクエリーはありません(単純なクエリーであればesを使う必要もないでしょう).複雑なクエリーであれば、大量のコードロジックが必要で、理解が難しい.
bboss-elasticsearchは国産オープンソースフレームワークであり、query dsl構文操作と分散検索エンジンelasticsearchへのアクセスに基づくo/r mapping高性能開発ライブラリであり、下位層はes restful apiに基づいてmybatisのようにデータesサーバを操作することができます.
個人的にはbboss-elasticsearchsには2つのメリットがあると思います.1.操作データベースのインタフェースを提供し、データソースを追加しなくてもデータの全量、増分インポートを実現できる.オリジナルのquery、dsl文を使用すると、友好度が高く、学習と交流が便利になります.コードの読み取り可能性が高い.
2.bboss-elasticsearchの統合
本プロジェクトは6.2.4バージョンを使用しているため、6.0.2バージョンのjarパッケージを使用し、その他のesバージョンはElasticsearch Bboss開発ドキュメントを参照してください.
com.bbossgroups.plugins
bboss-elasticsearch-spring-boot-starter
6.0.2
com.bbossgroups.plugins
bboss-elasticsearch-rest-jdbc
6.0.2
mysql
mysql-connector-java
2.1関連構成
resources ,
application.properties , :
elasticsearch.rest.hostNames=xxx.xx.xx.x:9200
// es 9200
//es elasticsearch.yml http.port: 9200
2.2非同期バッチ同期
//
ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
if (clientUtil.existIndice(ConstUtil.MENU_INDEX)) {// , ,
clientUtil.dropIndice(ConstUtil.MENU_INDEX);
}
String mapping = readMappingJson("mappings/menu.json");//
clientUtil.createIndiceMapping(ConstUtil.MENU_INDEX, mapping);//
DB2ESImportBuilder importBuilder = DB2ESImportBuilder.newInstance();
// sql , , sql ,
importBuilder.setSql("select * from test")
.setDbDriver(ConstUtil.DB_DRIVER)
.setDbUrl("jdbc:mysql://xxx.xx.xx.x.69:3306/ccms?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useCursorFetch=true")
.setDbUser(ConstUtil.DB_USERNAME)
.setDbPassword(ConstUtil.DB_PASSWORD)
.setValidateSQL("select 1")
.setUsePool(false);//
/**
* es
*/
importBuilder
.setIndex(index) //
.setIndexType(type) //
//.setRefreshOption("refresh")// ,null ,importBuilder.setRefreshOption("refresh");
.setUseJavaName(true) // , java , :doc_id -> docId
.setBatchSize(5000) // , es , -1, ,> 0
.setJdbcFetchSize(10000);// fetchsize, mysql url useCursorFetch=true mysql fetch , ,jdbcFetchSize useCursorFetch ,
importBuilder.setFixedRate(false)// jdk timer task fixedRate
// .setScheduleDate(date) // :
.setDeyLay(5000L); // deylay
// .setPeriod(10000L); // period , ,
/**
* 、 , elasticsearch ,
*/
importBuilder.setParallel(true);//
importBuilder.setQueue(10);//
importBuilder.setThreadCount(50);//
importBuilder.setContinueOnError(true);// , :true( ) false
importBuilder.setAsyn(false);//true , , ;false( ) , ,
importBuilder.setEsIdField("_id");// , , id
importBuilder.setDebugResponse(true);// reponse , false, , ,log INFO
importBuilder.setDiscardBulkResponse(false);// , false,true , true,
DataStream dataStream = importBuilder.builder();
dataStream.execute();
2.3タイミングインクリメンタル同期
//
ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
if (clientUtil.existIndice(ConstUtil.MENU_INDEX)) {// , ,
clientUtil.dropIndice(ConstUtil.MENU_INDEX);
}
String mapping = readMappingJson("mappings/menu.json");//
clientUtil.createIndiceMapping(ConstUtil.MENU_INDEX, mapping);//
DB2ESImportBuilder importBuilder = DB2ESImportBuilder.newInstance();
// sql , , sql ,
importBuilder.setSql("select * from test where last_update_time > #[time]")// time
.setDbDriver(ConstUtil.DB_DRIVER)
.setDbUrl("jdbc:mysql://xxx.xx.xx.x.69:3306/ccms?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useCursorFetch=true")
.setDbUser(ConstUtil.DB_USERNAME)
.setDbPassword(ConstUtil.DB_PASSWORD)
.setValidateSQL("select 1")
.setUsePool(true);//
/**
* es
*/
importBuilder
.setIndex(index) //
.setIndexType(type) //
//.setRefreshOption("refresh")// ,null ,importBuilder.setRefreshOption("refresh");
.setUseJavaName(true) // , java , :doc_id -> docId
.setBatchSize(5000) // , es , -1, ,> 0
.setJdbcFetchSize(10000);// fetchsize, mysql url useCursorFetch=true mysql fetch , ,jdbcFetchSize useCursorFetch ,
importBuilder.setFixedRate(false)// jdk timer task fixedRate
// .setScheduleDate(date) // :
.setDeyLay(5000L); // deylay
.setPeriod(10000L); // period , ,
// importBuilder.setNumberLastValueColumn("log_id");// , sql ,
// importBuilder.setNumberLastValueColumn("log_id");// , sql ,
importBuilder.setFromFirst(true);// , , , ,
importBuilder.setLastValueStorePath("testdb");// , ( )
// importBuilder.setLastValueStoreTableName("test");// , , increament_tab
importBuilder.setLastValueType(ImportIncreamentConfig.NUMBER_TYPE);// , :ImportIncreamentConfig.NUMBER_TYPE
// ImportIncreamentConfig.TIMESTAMP_TYPE
/**
* 、 , elasticsearch ,
*/
importBuilder.setParallel(true);//
importBuilder.setQueue(10);//
importBuilder.setThreadCount(50);//
importBuilder.setContinueOnError(true);// , :true( ) false
importBuilder.setAsyn(false);//true , , ;false( ) , ,
importBuilder.setEsIdField("_id");// , , id
importBuilder.setDebugResponse(true);// reponse , false, , ,log INFO
importBuilder.setDiscardBulkResponse(false);// , false,true , true,
DataStream dataStream = importBuilder.builder();
dataStream.execute();
2.4 officeドキュメントの内容をesに同期する
,
1.
2. es :
importBuilder.setDataRefactor(new DataRefactor() {
@Override
public void refactor(Context context) throws Exception {
String url = (String) context.getValue("url");
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse(context.getValue("time").toString(),dateTimeFormatter);
Date date = Date.from(parse.toInstant(ZoneOffset.of("+8")));
String base64Txt = DocUtil.extractTextFromFile(url );
Doc doc = new Doc((String) context.getValue("title"),(String) context.getValue("name"),base64Txt,date);
ClientInterface clientUtil = ElasticSearchHelper.getRestClientUtil();
clientUtil.addDocument(ConstUtil.DOC_INDEX,"doc?pipeline=attachment",doc);//
}
});
未完待機