ElasticSearch戦闘シリーズ3:ElasticSearch JAVA APIのチュートリアル

序文

前回の記事で紹介しElasticSearch戦闘シリーズ2:DSL文チュートリアルのElasticSearch ---詳細なグラフィック、この記事では、彼の公式のJava APIのをオフ6.xのElasticSearch用語を使用します。

ElasticSearch JAVA API

現在、市場にいくつかの共通のフレームElasticSearchのJava APIパッケージ、JestClient、SpringBoot統合SpringData、春の統合ElasticsearchTemplate、Elasticsearch Bbossラックや他のいくつかのオープンソースパッケージは、これらのサードパーティの統合棚パッケージがあり、基本的には毎日の使用でサポートされていますそれのESのバージョンをサポートすることに加えて低くなります。

この記事ではElasticSearch公式でJava High Level REST Client、使用Java High Level REST Clientには十分に1.8以上の大規模なリリース、および棚パッケージ自体と互換性があり、JDKが必要で、現在のバージョン6.x以上を推奨ElasticSearchの公式です含むJava Low Level REST Clientいくつかのケースでは方法は、特別なニーズ特別な処理にも対応することができ、それはいくつかの方法のため繧パッケージスタイル一般的であり、コールが直接操作に使用される名前に対応することができる、(非同期)呼び出し同期および非同期の両方をサポートします。

ここでは、使用して制御することを学ぶことは非常に簡単にすることができ、そのような言葉を使うDSL文の対応する記事に直接使用することができます。

以下で動作しているとき、我々は最初Elasticsearchを見てJava High Level REST Client、それの初期接続文言。


    RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost(elasticIp, elasticPort)));

それは非常に単純な閉じ、クライアントが直接近い空にすることはできません、非常に簡単ではありません!

まず、新しいデータ

ElasticSearchは、限り、あなたはすることができ、インデックス(索引データベース名)とタイプ(タイプ)を指定して、データを直接追加することができます。あなたがあなた自身の主キーIDを指定することができたときに、新しいでは、あなたはElasticSearch自体によって生成され、指定されない場合があります。Elasticsearch Java High Level REST Client新しいデータをここで我々はそれを書かれたこれら三つのを見て、3つのメソッドを提供します。

jsonStringによって作成された新しいデータのサンプルコード、:

    String index = "test1";
    String type = "_doc";
    // 唯一编号
    String id = "1";
    IndexRequest request = new IndexRequest(index, type, id);

    String jsonString = "{" + "\"uid\":\"1234\","+ "\"phone\":\"12345678909\","+ "\"msgcode\":\"1\"," + "\"sendtime\":\"2019-03-14 01:57:04\","
            + "\"message\":\"xuwujing study Elasticsearch\"" + "}";
    request.source(jsonString, XContentType.JSON);
    IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

例二つの新しいデータコードは、マップが作成され、データは自動的にJSONに変換されます。

    String index = "test1";
    String type = "_doc";
    // 唯一编号
    String id = "1";
    IndexRequest request = new IndexRequest(index, type, id);
    Map<String, Object> jsonMap = new HashMap<>();
    jsonMap.put("uid", 1234);
    jsonMap.put("phone", 12345678909L);
    jsonMap.put("msgcode", 1);
    jsonMap.put("sendtime", "2019-03-14 01:57:04");
    jsonMap.put("message", "xuwujing study Elasticsearch");
    request.source(jsonMap);
    IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

例XContentBuilderオブジェクトによって作成された3つの新しいデータコード、:

   String index = "test1";
    String type = "_doc";
    // 唯一编号
    String id = "1";
    IndexRequest request = new IndexRequest(index, type, id);
    XContentBuilder builder = XContentFactory.jsonBuilder();
    builder.startObject();
    {
        builder.field("uid", 1234);
        builder.field("phone", 12345678909L);
        builder.field("msgcode", 1);
        builder.timeField("sendtime", "2019-03-14 01:57:04");
        builder.field("message", "xuwujing study Elasticsearch");
    }
    builder.endObject();
    request.source(builder);
    IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);

- 上記の3つの方法は、個人的には理解して使用しやすく、秒をお勧めします。

第二に、インデックス・ライブラリを作成します

上記の例では、インデックスを作成するために、データライブラリを作成することによって直接渡さが、インデックスはこのライブラリによって作成されていないと自己生成されたESは、それがデフォルトの設定を使用しているため、フィールド構造は(テキストテキストです、友好的ではありません余分なスペース)ストレージ、断片化とインデックスは、デフォルトは5と1で、デフォルト値のコピーされ、スライスのESの数は、私たちがここで、REINDEXない限り、作成後に変更することはできませんデータワード、テンプレートを作成するためのデータを指定します。
上記の方法と新しいデータのインデックスを作成するためのJava APIライブラリを使用して同じように、そこに3つの方法がありますが、ここでのみ紹介しています。

新しいサンプルコードインデックスライブラリ:

private static void createIndex() throws IOException {
    String type = "_doc";
    String index = "test1";
    // setting 的值
    Map<String, Object> setmapping = new HashMap<>();
    // 分区数、副本数、缓存刷新时间
    setmapping.put("number_of_shards", 10);
    setmapping.put("number_of_replicas", 1);
    setmapping.put("refresh_interval", "5s");
    Map<String, Object> keyword = new HashMap<>();
    //设置类型
    keyword.put("type", "keyword");
    Map<String, Object> lon = new HashMap<>();
    //设置类型
    lon.put("type", "long");
    Map<String, Object> date = new HashMap<>();
    //设置类型
    date.put("type", "date");
    date.put("format", "yyyy-MM-dd HH:mm:ss");

    Map<String, Object> jsonMap2 = new HashMap<>();
    Map<String, Object> properties = new HashMap<>();
    //设置字段message信息
    properties.put("uid", lon);
    properties.put("phone", lon);
    properties.put("msgcode", lon);
    properties.put("message", keyword);
    properties.put("sendtime", date);
    Map<String, Object> mapping = new HashMap<>();
    mapping.put("properties", properties);
    jsonMap2.put(type, mapping);

    GetIndexRequest getRequest = new GetIndexRequest();
    getRequest.indices(index);
    getRequest.local(false);
    getRequest.humanReadable(true);
    boolean exists2 = client.indices().exists(getRequest, RequestOptions.DEFAULT);
    //如果存在就不创建了
    if(exists2) {
        System.out.println(index+"索引库已经存在!");
        return;
    }
    // 开始创建库
    CreateIndexRequest request = new CreateIndexRequest(index);
    try {
        // 加载数据类型
        request.settings(setmapping);
        //设置mapping参数
        request.mapping(type, jsonMap2);
        //设置别名
        request.alias(new Alias("pancm_alias"));
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        boolean falg = createIndexResponse.isAcknowledged();
        if(falg){
            System.out.println("创建索引库:"+index+"成功!" );
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

}

注意:インデックスライブラリを作成するときに、ライブラリーは、最初のインデックスが存在するかどうかを決定する必要があります!
ちなみに別名(エイリアス)を指定し、ここでインデックスライブラリを作成する場合は、このエイリアスは、ここで我々は次回の話を続けて、クエリのパフォーマンスを向上させることができ、適切な使用は良いことです。

第三に、データを変更

ES APIが変更された時間を提供し、2つの方法がありますが、一つは直接変更されますが、データが存在しない場合は例外がスローされます、他の更新がある場合、挿入時には存在しません。最初に比べて、第二は、より有用番号になりますが、書き込み速度に最初の1ほど良好ではありません。

ESは、コード変形例:

private static void update() throws IOException {
    String type = "_doc";
    String index = "test1";
    // 唯一编号
    String id = "1";
    UpdateRequest upateRequest = new UpdateRequest();
    upateRequest.id(id);
    upateRequest.index(index);
    upateRequest.type(type);

    // 依旧可以使用Map这种集合作为更新条件
    Map<String, Object> jsonMap = new HashMap<>();
    jsonMap.put("uid", 12345);
    jsonMap.put("phone", 123456789019L);
    jsonMap.put("msgcode", 2);
    jsonMap.put("sendtime", "2019-03-14 01:57:04");
    jsonMap.put("message", "xuwujing study Elasticsearch");
    upateRequest.doc(jsonMap);
    // upsert 方法表示如果数据不存在,那么就新增一条
    upateRequest.docAsUpsert(true);
    client.update(upateRequest, RequestOptions.DEFAULT);
    System.out.println("更新成功!");

}

注:この方法は、データが存在しないことを示しているUPSERT、デフォルトはfalseです追加します。

第四に、データを削除

DELETEメソッドを、言うまでも無く、おそらく、上記の動作のいくつかによると、すでに私たちはまだ始まったばかりということ、知っています。

ES IDのコード例を削除します。

private static void delete() throws IOException {

    String type = "_doc";
    String index = "test1";
    // 唯一编号
    String id = "1";
    DeleteRequest deleteRequest = new DeleteRequest();
    deleteRequest.id(id);
    deleteRequest.index(index);
    deleteRequest.type(type);
    // 设置超时时间
    deleteRequest.timeout(TimeValue.timeValueMinutes(2));
    // 设置刷新策略"wait_for"
    // 保持此请求打开,直到刷新使此请求的内容可以搜索为止。此刷新策略与高索引和搜索吞吐量兼容,但它会导致请求等待响应,直到发生刷新
    deleteRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL);
    // 同步删除
    DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
}       

ESの条件に応じて削除します。

   private static void deleteByQuery() throws IOException {
    String type = "_doc";
    String index = "test1";
    DeleteByQueryRequest request = new DeleteByQueryRequest(index,type);
    // 设置查询条件
    request.setQuery(QueryBuilders.termsQuery("uid",1234));
    // 同步执行
    BulkByScrollResponse bulkResponse = client.deleteByQuery(request, RequestOptions.DEFAULT);
}

テスト結果

図の例:

質問

ここでは簡単な紹介の下にいくつかの一般的なクエリAPIの使用法であり、その後、すべての直接クエリコードを与えます。

クエリAPI

  • 等価(用語のクエリ:QueryBuilders.termQuery(名前、値);
  • マルチ値(用語)のクエリ:QueryBuilders.termsQuery(名前、値、値2、値3 ...)。
  • 範囲(レンジ)のクエリ:QueryBuilders.rangeQuery(名).gte(値).lte(値);
  • クエリがあります(存在):QueryBuilders.existsQuery(名);
  • ファジー(ワイルドカード)クエリ:QueryBuilders.wildcardQuery(名前、+値+);
  • 組成物(ブール値)問合せ:BoolQueryBuilder boolQueryBuilder =新しいBoolQueryBuilder();

すべてのコード例を照会

 private static void allSearch() throws IOException {
    SearchRequest searchRequestAll = new SearchRequest();
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    searchRequestAll.source(searchSourceBuilder);
    // 同步查询
    SearchResponse searchResponseAll = client.search(searchRequestAll, RequestOptions.DEFAULT);
    System.out.println("所有查询总数:" + searchResponseAll.getHits().getTotalHits());
}

一般的なお問い合わせコード例

実際には、内部等価クエリ、しかしは、タイムアウトなどのルーティング設定をソート、ページングに参加し、そしていくつかの処理を追加した結果を問い合わせます。

   private static void genSearch() throws IOException {
    String type = "_doc";
    String index = "test1";
    // 查询指定的索引库
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.types(type);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 设置查询条件
    sourceBuilder.query(QueryBuilders.termQuery("uid", "1234"));
    // 设置起止和结束
    sourceBuilder.from(0);
    sourceBuilder.size(5);
    sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
    // 设置路由
//      searchRequest.routing("routing");
    // 设置索引库表达式
    searchRequest.indicesOptions(IndicesOptions.lenientExpandOpen());
    // 查询选择本地分片,默认是集群分片
    searchRequest.preference("_local");

    // 排序
    // 根据默认值进行降序排序
//  sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC));
    // 根据字段进行升序排序
//  sourceBuilder.sort(new FieldSortBuilder("id").order(SortOrder.ASC));

    // 关闭suorce查询
//  sourceBuilder.fetchSource(false);

    String[] includeFields = new String[]{"title", "user", "innerObject.*"};
    String[] excludeFields = new String[]{"_type"};
    // 包含或排除字段
//  sourceBuilder.fetchSource(includeFields, excludeFields);

    searchRequest.source(sourceBuilder);
    System.out.println("普通查询的DSL语句:"+sourceBuilder.toString());
    // 同步查询
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

    // HTTP状态代码、执行时间或请求是否提前终止或超时
    RestStatus status = searchResponse.status();
    TimeValue took = searchResponse.getTook();
    Boolean terminatedEarly = searchResponse.isTerminatedEarly();
    boolean timedOut = searchResponse.isTimedOut();

    // 供关于受搜索影响的切分总数的统计信息,以及成功和失败的切分
    int totalShards = searchResponse.getTotalShards();
    int successfulShards = searchResponse.getSuccessfulShards();
    int failedShards = searchResponse.getFailedShards();
    // 失败的原因
    for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
        // failures should be handled here
    }
    // 结果
    searchResponse.getHits().forEach(hit -> {
        Map<String, Object> map = hit.getSourceAsMap();
        System.out.println("普通查询的结果:" + map);
    });
    System.out.println("\n=================\n");
}

またはクエリ

また、実際には、このクエリは同等のSQL文ですクエリまたはブールクエリの種類、

SELECT * FROM TEST1場合(UID = 1つの又はUID = 2)及び電話= 12345678919

コード例:

private static void orSearch() throws IOException {
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices("test1");
    searchRequest.types("_doc");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
    BoolQueryBuilder boolQueryBuilder2 = new BoolQueryBuilder();
 
      /**
     *  SELECT * FROM test1 where (uid = 1234 or uid =12345)  and phone = 12345678909
     * */
    boolQueryBuilder2.should(QueryBuilders.termQuery("uid", 1234));
    boolQueryBuilder2.should(QueryBuilders.termQuery("uid", 12345));
    boolQueryBuilder.must(boolQueryBuilder2);
    boolQueryBuilder.must(QueryBuilders.termQuery("phone", "12345678909"));
    searchSourceBuilder.query(boolQueryBuilder);
    System.out.println("或查询语句:" + searchSourceBuilder.toString());
    searchRequest.source(searchSourceBuilder);
    // 同步查询
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

    searchResponse.getHits().forEach(documentFields -> {

        System.out.println("查询结果:" + documentFields.getSourceAsMap());
    });

}

ファジィクエリ

SQLクエリステートメントの同等のように。

private static void likeSearch() throws IOException {
    String type = "_doc";
    String index = "test1";
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.indices(index);
    searchRequest.types(type);
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

   /**
     *  SELECT * FROM p_test where  message like '%xu%';
     * */
    boolQueryBuilder.must(QueryBuilders.wildcardQuery("message", "*xu*"));
    searchSourceBuilder.query(boolQueryBuilder);
    System.out.println("模糊查询语句:" + searchSourceBuilder.toString());
    searchRequest.source(searchSourceBuilder);
    // 同步查询
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    searchResponse.getHits().forEach(documentFields -> {
        System.out.println("模糊查询结果:" + documentFields.getSourceAsMap());
    });
    System.out.println("\n=================\n");
}

複数値クエリ

これは、クエリ内のSQL文と同等です。

     private static void inSearch() throws IOException {
        String type = "_doc";
        String index = "test1";
        // 查询指定的索引库
        SearchRequest searchRequest = new SearchRequest(index,type);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        /**
         *  SELECT * FROM p_test where uid in (1,2)
         * */
        // 设置查询条件
        sourceBuilder.query(QueryBuilders.termsQuery("uid", 1, 2));
        searchRequest.source(sourceBuilder);
        System.out.println("in查询的DSL语句:"+sourceBuilder.toString());
        // 同步查询
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        // 结果
        searchResponse.getHits().forEach(hit -> {
            Map<String, Object> map = hit.getSourceAsMap();
            String string = hit.getSourceAsString();
            System.out.println("in查询的Map结果:" + map);
            System.out.println("in查询的String结果:" + string);
        });

        System.out.println("\n=================\n");
    }

クエリを存在

このフィールドが存在するかどうかを確認し、存在すると同様のSQLステートメントを使用しています。

  private static void existSearch() throws IOException {
    String type = "_doc";
    String index = "test1";
    // 查询指定的索引库
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.types(type);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    // 设置查询条件
     sourceBuilder.query(QueryBuilders.existsQuery("msgcode"));
    searchRequest.source(sourceBuilder);
    System.out.println("存在查询的DSL语句:"+sourceBuilder.toString());
    // 同步查询
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    // 结果
    searchResponse.getHits().forEach(hit -> {
        Map<String, Object> map = hit.getSourceAsMap();
        String string = hit.getSourceAsString();
        System.out.println("存在查询的Map结果:" + map);
        System.out.println("存在查询的String结果:" + string);
    });
    System.out.println("\n=================\n");
}

範囲クエリ

SQLステートメントおよびGTがより大きい使用、<ように>、LTは以上GTE、未満で、LTEは少ないです。

private static void rangeSearch() throws IOException{
    String type = "_doc";
    String index = "test1";
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.types(type);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    // 设置查询条件
    sourceBuilder.query(QueryBuilders.rangeQuery("sendtime").gte("2019-01-01 00:00:00").lte("2019-12-31 23:59:59"));
    searchRequest.source(sourceBuilder);
     System.out.println("范围查询的DSL语句:"+sourceBuilder.toString());
    // 同步查询
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    // 结果
    searchResponse.getHits().forEach(hit -> {
        String string = hit.getSourceAsString();
        System.out.println("范围查询的String结果:" + string);
    });
    System.out.println("\n=================\n");
}

定期的なクエリ

ESは、通常のクエリを使用することができ、クエリは、次のサンプルコードは非常に簡単です:

 private static void regexpSearch() throws IOException{
    String type = "_doc";
    String index = "test1";
    // 查询指定的索引库
    SearchRequest searchRequest = new SearchRequest(index);
    searchRequest.types(type);
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    // 设置查询条件
    sourceBuilder.query(QueryBuilders.regexpQuery("message","xu[0-9]"));
    searchRequest.source(sourceBuilder);
     System.out.println("正则查询的DSL语句:"+sourceBuilder.toString());
    // 同步查询
    SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
    // 结果
    searchResponse.getHits().forEach(hit -> {
        Map<String, Object> map = hit.getSourceAsMap();
        String string = hit.getSourceAsString();
        System.out.println("正则查询的Map结果:" + map);
        System.out.println("正则查询的String结果:" + string);
    });

    System.out.println("\n=================\n");
}

クエリ結果

すべてのクエリの合計数:6
DSL文の一般的なクエリ:{ "から":0、 "サイズ":5、 "タイムアウト": "60年代"、 "クエリ":{ "用語":{ "UID":{ "値" : "1234"、 "ブースト" :1.0}}}}

=================

或查询语句:{ "クエリ":{ "BOOL":{ "必要":[{ "BOOL":{ "べき":[{ "という用語は":{ "UID":{ "値" 1234 "ブースト":1.0}}}、{"という用語は":{" UID ":{"値":12345、"ブースト":1.0}}}]、" adjust_pure_negative ":真、"ブースト":1.0}}、{"用語":{"電話":{"値":" 12345678909" 、 "ブースト":1.0}}}]、 "adjust_pure_negative":真、 "ブースト":1.0}}}
或查询结果:{msgcode = 1、 UID = 12345、電話= 12345678909、メッセージ= QQ、SENDTIME = 2019年3月14日1時57分04秒}

=================

ファジークエリ:{ "クエリ":{ "BOOL":{ "MUST":[{ "ワイルドカード":{ "メッセージ":{ "ワイルドカード": " "、 "ブースト":1.0}}}]、 " adjust_pure_negative ":真、"ブースト」 :1.0}}}
結果ぼやけ:{msgcode = 2、= UID 12345、電話= 123456789019、SENDTIME = 2019年3月14日1時57分04秒、メッセージ= xuwujing研究elasticsearch}
ファジィを結果:{UID = 123456、電話= 12345678909、メッセージ= XU1、SENDTIME = 2019年3月14日1時57分04秒}

=================

プレゼンスクエリDSL声明:{ "クエリ":{ "存在":{ "フィールド": "msgcode"、 "ブースト":1.0}}}
プレゼンスクエリマップの結果:{msgcode = 2、UID = 12345、電話= 123456789019、SENDTIME = 2019年3月14日1時57分04秒、メッセージ = xuwujing研究elasticsearch}
プレゼンスストリングクエリ結果:{ "UID":12345、 "電話":123456789019、 "msgcode":2、 "SENDTIME": "2019年3月14日午前1時57分04秒"、 "メッセージ" : "xuwujing研究elasticsearch"}
プレゼンスクエリ結果マップ:{msgcode = 1、UID = 12345、電話= 12345678909、メッセージ= QQ、SENDTIME = 2019- 3月14日1時57分04秒}
プレゼンスストリングクエリ結果:{ "UID": "12345 "、 "電話": "12345678909"、 "メッセージ": "QQ"、 "msgcode": "1"、「SENDTIME 「:」2019年3月14日1時57分04秒「}

=================

范围查询的DSL语句:{ "クエリ":{ "範囲":{ "SENDTIME":{ "から": "2019年1月1日00:00:00"、 "に"、「2019年12月31日23 :59:59" 、 "include_lower":真、 "include_upper":真、 "ブースト":1.0}}}}
范围查询的ストリング结果:{ "UID":12345、 "電話":123456789019、 "msgcode": 2、 "SENDTIME": "2019年3月14日午前1時57分04秒"、 "メッセージ": "xuwujing研究Elasticsearch"}
范围查询的ストリング结果:{ "UID": "123456"、 "電話": "12345678909 」、 "メッセージ": "XU1"、 "SENDTIME": "2019年3月14日一時57分04秒"}
范围查询的ストリング结果:{ "UID": "12345"、 "電話": "12345678909"、 "メッセージ": "QQ"、 "msgcode": "1"、」SENDTIME ":" 2019年3月14日午前1時57分04" 秒}

=================

定期的なDSLステートメントのクエリ:{ "クエリ":{ "正規表現":{ "メッセージ":{ "値": "徐[0-9]"、 "flags_value":65535、 "max_determinized_states":10000、 "ブースト" :1.0}}}}
マップ正規クエリ結果:= {UID 123456、電話= 12345678909、メッセージ= XU1、SENDTIME = 2019年3月14日午前1時57分04秒}
文字列正規クエリ結果:{ "UID": " 123456 ""電話":" 12345678909 ""メッセージ":" XU1 "" SENDTIME ":" 2019年3月14日1時57分04秒「}

=================

组合查询的DSL语句:{ "クエリ":{ "BOOL":{ "必須":[{ "という用語は":{ "UID":{ "値":12345、 "ブースト":1.0}}}、{」用語":{" msgcode ":{"値":1、"ブースト":1.0}}}]、" adjust_pure_negative ":真、"ブースト":1.0}}}
组合查询的ストリング结果:{" "UID: "12345"、 "電話": "12345678909"、 "メッセージ": "QQ"、 "msgcode": "1"、 "SENDTIME": "2019年3月14日一時57分04秒"}

=================

他の

参考ESの公式文書:
https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html

SpringBoot統合利用についてElasticSearchとJestClientはこの記事を閲覧することができます:マルチバージョンの互換性ElasticSearchのSpringBoot統合を

ElasticSearchバージョンは、6.xで推奨される場合に選択ElasticSearchのJava APIについて、以前にJestClientを使用。あなたは6.xと7.xの後にアップグレードするに興味がある場合は、ESの公式を指示Java High Level REST Client7.xの後に直接放棄されますので、Transport client接続、現在の春とSpringBoot ESは、統合された方法の使用である私は、フォローアップを知りません(我々は)の調整を行います。

この記事のコードは、私の中に含まれているのjava-研究の興味があれば、主演してください、フォークや課題、プロジェクト。
プロジェクト住所:https://github.com/xuwujing/java-study

ElasticSearch戦闘シリーズ
ElasticSearchクラスタ+ Kinabaインストールチュートリアル:ElasticSearchシリーズ戦う
ElasticSearch戦闘シリーズ2:DSL文チュートリアルのElasticSearchを---詳細なグラフィック

推奨される音楽

オリジナルは、あなたが良い感じている場合、勧告を与えたい、容易ではありません!あなたのサポートが私の文章の最大駆動力です!
著作権:
著者:虚無の領土の
ブログパーク出典:http://www.cnblogs.com/xuwujing
CSDN出典:http://blog.csdn.net/qazwsxpcm    
個人ブログ出典:http://www.panchengming.com

おすすめ

転載: www.cnblogs.com/xuwujing/p/11645630.html