• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    2年前 (2016-08-18)  Elasticsearch |   抢沙发  25 
    文章评分 0 次,平均分 0.0

    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));
    
                XContentBuilder builder = jsonBuilder().startObject().field("user", "kimchy").field("postDate", new Date())
                        .field("message", "trying out Elasticsearch").endObject();
    
    
                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();
            }
    
        }
    
    }

    可以通过head插件查看插入的数据。

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/5055.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享