1. 程式人生 > >Elasticsearch生成json,建立索引(把資料寫入索引中)

Elasticsearch生成json,建立索引(把資料寫入索引中)

一、生成JSON

建立索引的第一步是要把物件轉換為JSON字串.官網給出了四種建立JSON文件的方法:

1.1手寫方式生成

String json = "{" +
        "\"user\":\"kimchy\"," +
        "\"postDate\":\"2013-01-30\"," +
        "\"message\":\"trying out Elasticsearch\"" +
    "}";
  • 1
  • 2
  • 3
  • 4
  • 5

手寫方式很簡單,但是要注意日期格式:Date Formate

1.2使用集合

集合是key:value資料型別,可以代表json結構.

Map<String
, Object> json = new HashMap<String, Object>(); json.put("user","kimchy"); json.put("postDate","2013-01-30"); json.put("message","trying out Elasticsearch");
  • 1
  • 2
  • 3
  • 4

1.3使用JACKSON序列化

ElasticSearch已經使用了jackson,可以直接使用它把javabean轉為json.

// instance a json mapper
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
// generate json byte[] json = mapper.writeValueAsBytes(yourbeaninstance);
  • 1
  • 2
  • 3
  • 4
  • 5

1.4使用ElasticSearch 幫助類

import static org.elasticsearch.common.xcontent.XContentFactory.*;

XContentBuilder builder = jsonBuilder()
    .startObject()
        .field("user", "kimchy")
        .field("postDate", new Date())
        .field
("message", "trying out Elasticsearch") .endObject() String json = builder.string();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二、建立索引

下面的例子把json文件寫入所以,索引庫名為twitter、型別為tweet,id為1:

import static org.elasticsearch.common.xcontent.XContentFactory.*;

IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
        .setSource(jsonBuilder()
                    .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                    .endObject()
                  )
        .get();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

也可以直接傳人JSON字串:

String json = "{" +
        "\"user\":\"kimchy\"," +
        "\"postDate\":\"2013-01-30\"," +
        "\"message\":\"trying out Elasticsearch\"" +
    "}";

IndexResponse response = client.prepareIndex("twitter", "tweet")
        .setSource(json)
        .get();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

可以呼叫response物件的方法獲取返回資訊:

// 索引名稱
String _index = response.getIndex();
// 型別名稱
String _type = response.getType();
// 文件id
String _id = response.getId();
// 版本(if it's the first time you index this document, you will get: 1)
long _version = response.getVersion();
// 是否被建立is true if the document is a new one, false if it has been updated
boolean created = response.isCreated();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

更簡單的可以直接System.out.println(response)檢視返回資訊.

三、java實現

新建一個java專案,匯入elasticsearch-2.3.3/lib目錄下的jar檔案.新建一個Blog類:

public class Blog {
    private Integer id;
    private String title;
    private String posttime;
    private String content;

    public Blog() {
    }

    public Blog(Integer id, String title, String posttime, String content) {
        this.id = id;
        this.title = title;
        this.posttime = posttime;
        this.content = content;
    }
  //setter and getter  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

建立java實體類轉json工具類:

import java.io.IOException;

import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;

public class JsonUtil {

    // Java實體物件轉json物件
    public static String model2Json(Blog blog) {
        String jsonData = null;
        try {
            XContentBuilder jsonBuild = XContentFactory.jsonBuilder();
            jsonBuild.startObject().field("id", blog.getId()).field("title", blog.getTitle())
                    .field("posttime", blog.getPosttime()).field("content",blog.getContent()).endObject();

            jsonData = jsonBuild.string();
            //System.out.println(jsonData);

        } catch (IOException e) {
            e.printStackTrace();
        }

        return jsonData;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

新增資料,返回一個list:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DataFactory {
    public static DataFactory dataFactory = new DataFactory();

    private DataFactory() {
    }

    public DataFactory getInstance() {
        return dataFactory;
    }

    public static List<String> getInitJsonData() {
        List<String> list = new ArrayList<String>();
        String data1 = JsonUtil.model2Json(new Blog(1, "git簡介", "2016-06-19", "SVN與Git最主要的區別..."));
        String data2 = JsonUtil.model2Json(new Blog(2, "Java中泛型的介紹與簡單使用", "2016-06-19", "學習目標 掌握泛型的產生意義..."));
        String data3 = JsonUtil.model2Json(new Blog(3, "SQL基本操作", "2016-06-19", "基本操作:CRUD ..."));
        String data4 = JsonUtil.model2Json(new Blog(4, "Hibernate框架基礎", "2016-06-19", "Hibernate框架基礎..."));
        String data5 = JsonUtil.model2Json(new Blog(5, "Shell基本知識", "2016-06-19", "Shell是什麼..."));
        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);
        list.add(data5);
        return list;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

建立索引、新增資料:

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.List;

import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;

import static org.elasticsearch.common.xcontent.XContentFactory.*;

public class ElasticSearchHandler {
    public static void main(String[] args) {
        try {
            /* 建立客戶端 */
            // client startup
            Client client = TransportClient.builder().build()
                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

            List<String> jsonData = DataFactory.getInitJsonData();

            for (int i = 0; i < jsonData.size(); i++) {
                IndexResponse response = client.prepareIndex("blog", "article").setSource(jsonData.get(i)).get();
                if (response.isCreated()) {
                   System.out.println("建立成功!");
                }
            }
            client.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

檢視插入的資料: 
這裡寫圖片描述

2016.12.12 日更新

視訊教程

這裡寫圖片描述

這裡寫圖片描述

相關推薦

Elasticsearch生成json建立索引資料寫入索引

一、生成JSON 建立索引的第一步是要把物件轉換為JSON字串.官網給出了四種建立JSON文件的方法: 1.1手寫方式生成 String json = "{" + "\"user\":\"kimchy\"," + "\"postDat

將模板word的特定欄位替換資料匯入word

一、 將模板word中的特定欄位替換(將資料匯入word中) 所用jar包 一、 將模板word中的特定欄位替換(將資料匯入word中) 所用jar包 開發程式碼 /** * @Title createContract * @description 生成合

PC端變成手機端的時候特效去掉canvas標簽去掉

window 方法 spa color win css display screen span PC端變成手機端的時候,把特效去掉(把canvas標簽去掉)<script> if (screen.width < 768){ $(‘can

第5天:自定義建構函式建立物件簡單工廠模式

面向物件 封裝、繼承、多型(抽象性) js是一門基於物件的語言 萬物皆物件 物件:有屬性和方法,具體特指的某個事物 物件:有特徵和行為,具體特指的某一事物 javaScript 中的所有事物都是物件:字串、數值、陣列、函式... 此外,Ja

【sql入門】根據要求繪製E/R圖建立資料庫1繪製E/R圖

第一步:根據題目判斷entiry,relationship和attribute。 例題: You are required to create a conceptual model of the data requirements for a company that sp

從ISO建立例項、例項生成快照建立映象(基於openstack kilo平臺、KVM虛擬化)

ISO建立例項 從ISO建立例項有兩個關鍵配置:雲主機型別flavor和ISO映象引數。 雲主機型別:openstack使用ISO映象建立虛擬機器例項時,會將選擇的雲主機型別flavor中的根磁碟(Disk)設定為cdrom,作為ISO的啟動的光碟機裝置,用於OS的安裝源;臨時磁碟(OS-FLV-EXT-D

彈球bouncing balls 二 新增惡魔圈建立balls前端

index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="

指定Qt程序運行的style比如fusion以前沒見過QStyleFactory

ret adding 文章 代碼 style .sh art int 一個 轉載請註明文章:指定Qt程序運行的style,比如fusion 出處:多客博圖 代碼很簡單,如下: #include <QtWidgets/QApplication> #i

悼念512汶川大地震遇難同胞——珍惜現在感恩生活復習多重背包

ems name clas ostream pre names 特點 生活 iostream 悼念512汶川大地震遇難同胞——珍惜現在,感恩生活 傳送門 【題目大意】 在資金一定的情況下,給出救難用的每袋大米的重量,價格,袋數。求購買大米的最終重量。 【思路】多重背包。 【

課程四(Convolutional Neural Networks)第一周Foundations of Convolutional Neural Networks —— 0.Learning Goals

lin opera 中文翻譯 textarea stride image sha oal tar Learning Goals Understand the convolution operation Understand the pooling operation

RedHat 6.5建立RAID5軟件磁盤陣列

RedHat 6.5;建立RAID raid5 RAID磁盤陣列的英文名稱是Redundant Array of Independent Disks (RAID),即獨立冗余磁盤陣列。RAID可以通過一些技術(軟件或硬件)將多個硬盤整合成為一個較大的磁盤設備;而這個較大的磁盤可不止存儲功能而已,它還具

小白學習之路基礎四函數的進階

strong 部分 iter 讀者 結果 http 內部 mod 取數 一,內置函數 前面已經認識了函數,對函數都有所了解了,其實呢,在Python中提供了很多內置的函數方便給我們調用。下面會給大家提到一些常用的常用內置函數的用法,當然還有一些其他沒講到的,你也可以看參考文

將數組轉化為json字符串不使用json_encode函數

enc pan cti 數組轉化為json div UNC key lse public 將數組轉化為json字符串(不使用json_encode函數) 1 public function arrayToJson($arr,$jsonStr=‘‘){ 2

課程一(Neural Networks and Deep Learning)第二週Basics of Neural Network programming—— 1、10個測驗題Neural N

              --------------------------------------------------中文翻譯-------

產品經理是做正確的事瞭解和發現使用者需求;專案經理則是事情做正確專案做的完美

以網際網路產品經理和專案經理為例來說說 首先,從知識領域來說,專案經理要求技術背景,這是必須的,一般團隊的專案經理由非常有專案經驗的RD擔當,他的職責在於將目標轉化為可量化可實現的專案計劃,偏重於執行層面。而產品經理的知識領域較泛,且不一定非要求懂技術。 其次,從責任週期來說,專案經

LeetCode 724. 尋找陣列的中心索引C、C++、python

給定一個整數型別的陣列 nums,請編寫一個能夠返回陣列“中心索引”的方法。 我們是這樣定義陣列中心索引的:陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。 如果陣列不存在中心索引,那麼我們應該返回 -1。如果陣列有多箇中心索引,那麼我們應該返回最靠近左邊的那一個。

Java基礎複習第五天陣列定義靜態、動態初始化陣列儲存機制及陣列的反轉、排序、遍歷

一 陣列定義和訪問 1.案例引入: 如果需要定義多個變數,那麼我們建議使用容器,一次性儲存多個數據,統一操作。 2.容器: 是將多個數據儲存到一起,每個資料稱為該容器的元素。 3.Java中容器: 陣列,集合 陣列:是一個長度固定的容器,而且容器中的元素

Mybatis generator生成ServiceController,新增批量新增資料介面(基於mybatis-generator-1.3.5原始碼修改)

    好久記錄筆記,這段時間做政府的專案,資料錄入系統基本都是通過excel匯入,且資料量大,許多也是單表的錄入,這就有很多可以通用的程式碼,如controller,service層的那一套都是可以程式碼生成,添加了一個數據庫批量新增介面(目前只支援oracle), 程式碼是基於mybatis-gener

判斷兩個單鏈表是否相交若相交求節點連結串列不帶環

先理解一下題目的意思,單鏈表的相交和普通兩條線的相交一樣嗎? 所以當我們把其換成節點就可以變成下面這樣: 先判斷連結串列是否相交,我們可以運用兩個連結串列相交後就變成了一條連結串列這個特性來判斷,因為如果兩條連結串列相交,那麼這兩條連結串列的最後一個節點一定

SSM專案引入其他jar找不到解決辦法jodconverter-2.2.2.jar

安裝到mvn裡面 mvn install:install-file -Dfile=jodconverter-2.2.2.jar -DgroupId=org.improve4meaven.jodconverter -DartifactId=jodconverter -Dversion= -