ElasticSearch使用Java客戶端創建文檔的兩種方法(XContentBuilder和jackson轉換實體)

1.通過XContentBuilder創建文檔

@Test
//創建文檔(通過XContentBuilder)
publicvoidtest4() throwsException{
    // 創建Client連接對象
    Settings settings=Settings.builder().put("cluster.name", "my‐elasticsearch").build();
    TransportClient client=new PreBuiltTransportClient(settings)    .addTransportAddress(newInetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300));
    //創建文檔信息
    XContentBuilder builder=XContentFactory.jsonBuilder()        
        .startObject()        
        .field("id", 1)        
        .field("title", "ElasticSearch是一個基於Lucene的搜索服務器")
        .field("content","它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。") 
       .endObject();
    // 建立文檔對象
    /**
        * 參數一blog1:表示索引對象
        * 參數二article:類型
        * 參數三1:建立id
    */
    client.prepareIndex("blog2", "article", "1").setSource(builder).get();
    //釋放資源
    client.close();
}

2.通過使用Jackson轉換實體創建文檔

(1)創建實體類對象

@Data
public class Article {
    private Integer id;
    private String title;
    private String content;
}

(2)添加jackson依賴包

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson‐core</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson‐databind</artifactId>
    <version>2.8.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson‐annotations</artifactId>
    <version>2.8.1</version>
</dependency>

(3)代碼具體實現

@Test
//創建文檔(通過實體轉json)
publicvoidtest5() throwsException{
    // 創建Client連接對象
    Settings settings=Settings.builder().put("cluster.name", "my‐elasticsearch").build();
    TransportClient client=new PreBuiltTransportClient(settings)          .addTransportAddress(newInetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9300));
    
    // 描述json 數據
    //{id:xxx, title:xxx,content:xxx}
    Article article=new Article();
    article.setId(2);
    article.setTitle("搜索工作其實很快樂");
    article.setContent("我們希望我們的搜索解決方案要快,我們希望有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP的索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠一臺開始並擴展到數百,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個雲的解決方案。Elasticsearch旨在解決所有這些問題和更多的問題。");

    ObjectMapper objectMapper=new ObjectMapper();

    // 建立文檔
    client.prepareIndex("blog2", "article", article.getId().toString()) .setSource(objectMapper.writeValueAsString(article).getBytes(),XContentType.JSON).get();
    //釋放資源
    client.close();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章