[置顶] [搜索]ElasticSearch Java Api(一) -创建索引

标签: elasticsearch java api es elasticsearch-java
67101人阅读 评论(42) 收藏 举报
分类:

ElasticSearch JAVA API

一、生成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","2013-01-30");
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 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使用指南


视频教程


这里写图片描述

这里写图片描述

课程地址:http://edu.csdn.net/course/detail/5578

查看评论

Elasticsearch Java API 的使用(2)—创建索引

Java创建索引创建索引前需要建立elasticsearch客户端,可查看Elasticsearch Java API 的使用(1)—创建客户端public class EsIndex{ pu...
  • zx711166
  • zx711166
  • 2017-09-04 16:28:48
  • 1027

Elasticsearch创建Index--java实现

将所要创建的index以json格式的方式写入配置文件,可以指定所要创建的index的字段类型,然后通过java api来创建index 具体实现: Index对象类: public class...
  • u014039577
  • u014039577
  • 2016-09-05 14:18:09
  • 5227

elasticsearch5.5.1的javaapi,含创建索引、mapping、查询、增加删除文档

  • 2017年08月19日 14:23
  • 7KB
  • 下载

Elasticsearch5.3 用JAVA创建索引

创建索引 1,首先我们要有已经搭建好的Elasticsearch 并且是没问题的! 废话不多说直接上代码了 import com.google.gson.Gson; import ...
  • Mrswon
  • Mrswon
  • 2017-06-30 19:46:27
  • 1530

elasticsearch-java api之索引(index)的各种操作

1、创建索引: 1)简单索引——没有指定mapping public static boolean createIndex(String indexName) { IndicesAdminCl...
  • liuxiao723846
  • liuxiao723846
  • 2017-12-04 10:23:10
  • 668

[ElasticSearch2.x]Java API 之 索引管理

ElasticSearch为了便于处理索引管理(Indices administration)请求,提供了 org.elasticsearch.client.IndicesAdminClient接口...
  • SunnyYoona
  • SunnyYoona
  • 2016-10-11 20:33:29
  • 8102

ElasticSearch java API--创建mapping

package Index; import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; import o...
  • an74520
  • an74520
  • 2012-11-19 17:42:11
  • 23250

ElasticSearch 入门

1、介绍ElasticSearch是一个基于 Apache Lucene(TM) 的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但是...
  • u013249965
  • u013249965
  • 2016-08-23 11:14:47
  • 2446

ElasticSearch 6.x 学习笔记:25.Java API之索引管理

25.1 判定索引是否存在 package cn.hadron; import org.elasticsearch.action.admin.indices.exists.indices.In...
  • chengyuqiang
  • chengyuqiang
  • 2018-01-21 23:02:20
  • 846

分布式搜索Elasticsearch——集成paoding

先做个记录,研究出来了,不记下来下次就不知道怎么处理了。 为es安装paoding插件 首先你得安装paoding插件,进入%ES_HOME%/bin,执行下列代码: plugin -i...
  • geloin
  • geloin
  • 2012-12-29 17:38:09
  • 12795
    StackOverFlow
    http://stackoverflow.com/users/6526424
    统计
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 102万+
    积分: 9712
    排名: 2300
    博客专栏
    最新评论