[搜索]ElasticSearch Java Api(一) -添加数据创建索引

概要:

1.使用Eclipse搭建Elasticsearch详情参考下面链接

2.Java Elasticsearch 配置

3.ElasticSearch Java Api(一) -添加数据创建索引



转载:http://blog.csdn.net/napoay/article/details/51707023

ElasticSearch JAVA API官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html

目录:

一、生成JSON

1.1手写方式生成

1.2使用集合

1.3使用JACKSON序列化

1.4使用ElasticSearch 帮助类

二、创建索引

三、java实现

一、生成JSON


创建索引的第一步是要把对象转换为JSON字符串.官网给出了四种创建JSON文档的方法:

1.1手写方式生成

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

手写方式很简单,但是要注意日期格式:Date Formate

1.2使用集合

集合是key:value数据类型,可以代表json结构.

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

1.3使用JACKSON序列化

ElasticSearch已经使用了jackson,可以直接使用它把javabean转为json.

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

1.4使用ElasticSearch 帮助类

 1 import static org.elasticsearch.common.xcontent.XContentFactory.*;
 2 
 3 XContentBuilder builder = jsonBuilder()
 4     .startObject()
 5         .field("user", "kimchy")
 6         .field("postDate", new Date())
 7         .field("message", "trying out Elasticsearch")
 8     .endObject()
 9 
10  String json = builder.string();

二、创建索引


下面的例子把json文档写入所以,索引库名为twitter、类型为tweet,id为1:

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

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

1 String json = "{" +
2         "\"user\":\"kimchy\"," +
3         "\"postDate\":\"2013-01-30\"," +
4         "\"message\":\"trying out Elasticsearch\"" +
5     "}";
6 
7 IndexResponse response = client.prepareIndex("twitter", "tweet")
8         .setSource(json)
9         .get();

可以调用response对象的方法获取返回信息:

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

更简单的可以直接System.out.println(response)查看返回信息.

三、java实现


新建一个java项目,导入elasticsearch-2.3.3/lib目录下的jar文件.新建一个Blog类:

 1 package com.cn.test.exaple1;
 2 
 3 public class Blog {
 4 
 5     private Integer id;
 6     private String title;
 7     private String posttime;
 8     private String content;
 9 
10     public Blog() {
11     }
12 
13     public Blog(Integer id, String title, String posttime, String content) {
14         this.id = id;
15         this.title = title;
16         this.posttime = posttime;
17         this.content = content;
18     }
19 
20     public Integer getId() {
21         return id;
22     }
23 
24     public void setId(Integer id) {
25         this.id = id;
26     }
27 
28     public String getTitle() {
29         return title;
30     }
31 
32     public void setTitle(String title) {
33         this.title = title;
34     }
35 
36     public String getPosttime() {
37         return posttime;
38     }
39 
40     public void setPosttime(String posttime) {
41         this.posttime = posttime;
42     }
43 
44     public String getContent() {
45         return content;
46     }
47 
48     public void setContent(String content) {
49         this.content = content;
50     }
51     
52     
53 }

创建java实体类转json工具类:

 1 package com.cn.test.exaple1;
 2 
 3 import java.io.IOException;
 4 
 5 import org.elasticsearch.common.xcontent.XContentBuilder;
 6 import org.elasticsearch.common.xcontent.XContentFactory;
 7 
 8 /**
 9 * @ClassName: JsonUtil
10 * @Description: java实体类转json工具类
11 * @author JinXing 
12 * @date 2017年12月1日 下午1:48:25
13 *
14 */ 
15 public class JsonUtil {
16 
17      // Java实体对象转json对象
18     public static String model2Json(Blog blog) {
19         String jsonData = null;
20         try {
21             XContentBuilder jsonBuild = XContentFactory.jsonBuilder();
22             jsonBuild.startObject().field("id", blog.getId()).field("title", blog.getTitle())
23                     .field("posttime", blog.getPosttime()).field("content",blog.getContent()).endObject();
24 
25             jsonData = jsonBuild.string();
26             System.out.println(jsonData);
27 
28         } catch (IOException e) {
29             e.printStackTrace();
30         }
31 
32         return jsonData;
33     }
34     
35 }

添加数据,返回一个list:

 1 package com.cn.test.exaple1;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7 * @ClassName: DataFactory
 8 * @Description: 添加数据,返回一个list:
 9 * @author JinXing 
10 * @date 2017年12月1日 下午3:08:02
11 *
12 */ 
13 public class DataFactory {
14 
15      public static DataFactory dataFactory = new DataFactory();
16 
17         private DataFactory() {
18         }
19 
20         public DataFactory getInstance() {
21             return dataFactory;
22         }
23 
24         //List 数据集
25         public static List<String> getInitJsonData() {
26             List<String> list = new ArrayList<String>();
27             String data1 = JsonUtil.model2Json(new Blog(1, "git简介", "2016-06-19", "SVN与Git最主要的区别..."));
28             String data2 = JsonUtil.model2Json(new Blog(2, "Java中泛型的介绍与简单使用", "2016-06-19", "学习目标 掌握泛型的产生意义..."));
29             String data3 = JsonUtil.model2Json(new Blog(3, "SQL基本操作", "2016-06-19", "基本操作:CRUD ..."));
30             String data4 = JsonUtil.model2Json(new Blog(4, "Hibernate框架基础", "2016-06-19", "Hibernate框架基础..."));
31             String data5 = JsonUtil.model2Json(new Blog(5, "Shell基本知识", "2016-06-19", "Shell是什么..."));
32             list.add(data1);
33             list.add(data2);
34             list.add(data3);
35             list.add(data4);
36             list.add(data5);
37             return list;
38         }
39 
40 }

创建索引、添加数据:

 1 package com.cn.test.exaple1;
 2 
 3 import java.io.IOException;
 4 import java.net.InetAddress;
 5 import java.net.UnknownHostException;
 6 import java.util.List;
 7 
 8 import org.elasticsearch.action.index.IndexResponse;
 9 import org.elasticsearch.client.Client;
10 import org.elasticsearch.client.transport.TransportClient;
11 import org.elasticsearch.common.transport.InetSocketTransportAddress;
12 
13 public class ElasticSearchHandler {
14 
15      public static void main(String[] args) {
16             try {
17                 /* 创建客户端 */
18                 // client startup
19                 Client client = TransportClient.builder().build()
20                         .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
21 
22                 //数据源
23                 List<String> jsonData = DataFactory.getInitJsonData();
24 
25                 for (int i = 0; i < jsonData.size(); i++) {
26                             
27                     //JSON文档写入索引,索引库名为blog、类型为article
28                     IndexResponse response = client.prepareIndex("blog", "article")
29                             //写入JSON字符串
30                             .setSource(jsonData.get(i)).get();
31                     if (response.isCreated()) {//是否被创建is true if the document is a new one, false if it has been updated
32                        System.out.println("创建成功!");
33                     }
34                 }
35                 
36                 client.close();
37             } catch (UnknownHostException e) {
38                 e.printStackTrace();
39             } catch (@SuppressWarnings("hiding") IOException e) {
40                 e.printStackTrace();
41             }
42 
43         }
44 
45     
46 }

查看插入的数据:

下面的插件为谷歌sense插件,下载参考地址:http://www.cnplugins.com/search/context-sense/download.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

java 利用JAX-RS快速开发RESTful 服务

JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/...

35270
来自专栏猿天地

smjdbctemplate基于Spring JdbcTemplate的升级版

GitHub地址:https://github.com/yinjihuan/smjdbctemplate

31120
来自专栏JAVA技术站

Eclispe下集成JFinal中jetty包作为开发环境

1.如果是gradle 或是maven项目地址在这,jetty-server包http://maven.oschina.net/index.html#nexu...

14520
来自专栏zhisheng

Spring Boot 2.0(七):SpringApplication 深入探索

对于第一个注解 @SpringBootApplication,我已经在博客 Spring Boot 2.0系列文章(六):Spring Boot 2.0中Spr...

17410
来自专栏精讲JAVA

接口方法上的注解无法被 @Aspect 声明的切面拦截的原因分析

在Spring中使用MyBatis的Mapper接口自动生成时,用一个自定义的注解标记在Mapper接口的方法中,再利用@Aspect定义一个切面,拦截这个注解...

49540
来自专栏Ryan Miao

shell模板变量替换

我们经常使用一些模板语言来处理一些变量替换。比如jsp,php,velocity,freemarker,thymeleaf等。那对于shell来说,应该怎样替换...

19030
来自专栏SpringBoot 核心技术

第三十七章:基于SpringBoot架构以及参数装载完成接口安全认证

531100
来自专栏小白鼠

SpringBoot几个注解MockMvcWireMockSwagger2@JsonViewHibernate Validator异常处理拦截方式上传下载异步处理RESTSpring Security

只有特定名称或者类型的Bean(通过@ConditionalOnMissingBean修饰)不存在于BeanFactory中时才创建某个Bean

33630
来自专栏happyJared

Spring Boot中读取配置属性的几种方式

  本文介绍Spring Boot中读取配置属性的几种方式,项目示例中用到的application.yml和application.properties定义如下...

1.7K20
来自专栏Jed的技术阶梯

Kafka 中使用 Avro 序列化框架(二):使用 Twitter 的 Bijection 类库实现 avro 的序列化与反序列化

使用传统的 avro API 自定义序列化类和反序列化类比较麻烦,需要根据 schema 生成实体类,需要调用 avro 的 API 实现 对象到 byte[]...

31740

扫码关注云+社区

领取腾讯云代金券