java 建立索引_ElasticSearch(java) 创建索引

一、生成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 json = new HashMap();

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 getInitJsonData() {

List list = new ArrayList();

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

}

}

}

查看插入的数据:

c35f4c083118183a63a986be8b96038d.png

2016.12.12 日更新

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值