Elasticsearch第3話(SpringBoot集積Elasticsearch)


ブログを書くのは自分の学習過程を記録するためであり、同じ志を持つ友达と一緒に勉強したいと思っています.文章は書く過程で漏れや間違いが避けられないので、文章の不足点を指摘することを歓迎します.詳細は、コードを叩くのが好きな遊子をクリックして見てください.淵に臨んで魚をうらやましがるより,引き下がって網を結んだほうがましだ.がんばって!
公式ドキュメントJavaApi:https://www.elastic.co/guide/en/elasticsearch/client/index.html
1、インポート依存
バージョンがネイティブバージョンと一致することを保証
<properties>
	<java.version>11</java.version>
	<elasticsearch.version>7.8.1</elasticsearch.version>
</properties>

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2、コアパッケージを認識する
org.elasticsearch.client:elasticsearch-rest-client
org.elasticsearch:elasticsearch

3、初期化
RestHighLevelClientインスタンスでは、以下の方法でRESTアドバンスドクライアントビルダーを構築する必要があります.
RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));

クライアントを閉じる
cline.close();

4、構成クラスの作成
@Configuration
public class ElasticsearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));

        return client;
    }

}

5、索引操作
1、索引の作成
@Test
	void contextLoads() throws IOException {
		//1、    
		CreateIndexRequest request = new CreateIndexRequest("yky_index2");
		//2、     ==>        
		CreateIndexResponse createIndexResponse
				= restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);

		System.out.println(createIndexResponse);
	}

2、インデックスがあるかどうかを判断する
 //     ==>        
    @Test
    void getIndex() throws IOException {
        GetIndexRequest request = new GetIndexRequest("yky");
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

3、索引の削除
   //    
    @Test
    void deleteIndex() throws IOException{
        DeleteIndexRequest request = new DeleteIndexRequest("yky_index");
        AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

6、文書の添削
1、文書テストの追加
データをオブジェクトにカプセル化=>リクエストの作成=>ルールの設定=>jsonデータフォーマットに変換=>リクエストの送信
    //      
    @Test
    void testAddDocument() throws IOException {
        //    
        User user = new User("        ",20);
        //    
        IndexRequest request = new IndexRequest("yky_index");
        //   put /yky/_doc/id
        request.id("1001");
        //    
        request.timeout(TimeValue.timeValueSeconds(1000));
        //request.timeout("1s");
        //        ==>     json  (fastjson)
        request.source(JSON.toJSONString(user), XContentType.JSON);
        //       
        IndexResponse index = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(index.toString());
        System.out.println(index.status());
    }

2、ドキュメントの取得
//      
    @Test
    void testUpdateDocument() throws IOException {
        //     id
        UpdateRequest request = new UpdateRequest("yky_index", "1001");
        request.timeout("1s");
        User user = new User("        ", 1);
        request.doc(JSON.toJSONString(user), XContentType.JSON);
        //    
        UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        System.out.println(update.toString());
        System.out.println(update.status());
    }

3、文書更新操作
  //      
    @Test
    void testUpdateDocument() throws IOException {
        //     id
        UpdateRequest request = new UpdateRequest("   ", "id");
        request.timeout("1s");
        User user = new User("        ", 1);
        request.doc(JSON.toJSONString(user), XContentType.JSON);
        //    
        UpdateResponse update = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        System.out.println(update.toString());
        System.out.println(update.status());
    }

4、ドキュメントの削除
  //    
    @Test
    void testDeleteDocument() throws IOException {
        DeleteRequest request = new DeleteRequest("yky_index", "1001");
        DeleteResponse delete = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.status());
    }

5、量産データ
    //      
    @Test
    void testBulkDocument() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");

        ArrayList<User> list = new ArrayList<>();
        //    

        for (int i = 0; i < list.size(); i++) {
            bulkRequest.add(
                    new IndexRequest("yky_index")
                    .id(""+(i+1))
                    .source(JSON.toJSONString(list.get(i)),XContentType.JSON));
        }

        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.hasFailures());
    }

6、照会
@Test
    //xxx QueryBuilder           
    void testSearchDocument() throws IOException {
        SearchRequest searchRequest = new SearchRequest("yky_index");
        //      
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //     ===> QueryBuilders       
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "   ");
        //MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();

        sourceBuilder.query(termQueryBuilder);
        //      
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        //    
        searchRequest.source(sourceBuilder);
        //  
        //sourceBuilder.from(1);
        //sourceBuilder.size(1);
        //  
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        //System.out.println(JSON.toJSONString(searchResponse.getHits()));
        System.out.println("===============");
        for (SearchHit hit : searchResponse.getHits().getHits()) {
            System.out.println(hit.getSourceAsMap());
        }