ElasticSearch(java) 創建索引


搜索]ElasticSearch Java Api(一) -創建索引

標簽: elasticsearchapijavaes
 分類:
 

目錄(?)[+]

 

ElasticSearch Java API官網文檔:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html

一、生成JSON


創建索引的第一步是要把對象轉換為JSON字符串.官網給出了四種創建JSON文檔的方法:

1.1手寫方式生成

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

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

1.2使用集合

集合是key:value數據類型,可以代表json結構.

Map<String, Object> json = new HashMap<String, Object>(); json.put("user","kimchy"); json.put("postDate",new Date()); json.put("message","trying out Elasticsearch");

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.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();

二、創建索引


下面的例子把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();

也可以直接傳人JSON字符串:

String json = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; IndexResponse response = client.prepareIndex("twitter", "tweet") .setSource(json) .get();

可以調用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();

更簡單的可以直接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 }

創建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; } }

添加數據,返回一個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; } }

創建索引、添加數據:

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 cn.com.bropen.entity.DataFactory; 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(); } } }

查看插入的數據: 
這里寫圖片描述

2016.12.12 日更新

使用5.X版本的移步到這里:Elasticsearch 5.0下Java API使用指南


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM