• ElasticSearch(三) DocumentAPIS Index API


    ElasticSearch 允许将一个JSON字符串作为文档。

    生成JSON文档有下面几种方式:

    • Manually (aka do it yourself) using native byte[] or as a String(自己构造byte[] 或者json串)
    • Using a Map that will be automatically converted to its JSON equivalent(使用Map自动转换为JSON)
    • Using a third party library to serialize your beans such as Jackson(将对象用第三方JSON库转换)
    • Using built-in helpers XContentFactory.jsonBuilder()(用XContentFactory)

    实际上每种类型最终都是转化为byte[],所以XContentFactory.jsonBuilder() 是最高效的办法。

    Do It Yourselfedit

    Nothing really difficult here but note that you will have to encode dates according to the Date Format.

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

    Using Mapedit

    Map is a key:values pair collection. It represents a JSON structure:

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

    Serialize your beansedit

    You can use Jackson to serialize your beans to JSON. Please add Jackson Databind to your project. Then you can use ObjectMapper to serialize your beans:

    import com.fasterxml.jackson.databind.*;
    
    // instance a json mapper
    ObjectMapper mapper = new ObjectMapper(); // create once, reuse
    
    // generate json
    byte[] json = mapper.writeValueAsBytes(yourbeaninstance);

    Use Elasticsearch helpersedit

    Elasticsearch provides built-in helpers to generate JSON content.

    import static org.elasticsearch.common.xcontent.XContentFactory.*;
    
    XContentBuilder builder = jsonBuilder()
        .startObject()
            .field("user", "kimchy")
            .field("postDate", new Date())
            .field("message", "trying out Elasticsearch")
        .endObject()

    Index documentedit

    The following example indexes a JSON document into an index called twitter, under a type called tweet, with id valued 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();

    Note that you can also index your documents as JSON String and that you don’t have to give an ID:

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

    IndexResponse object will give you a report:

    // Index name
    String _index = response.getIndex();
    // Type name
    String _type = response.getType();
    // Document ID (generated or not)
    String _id = response.getId();
    // Version (if it's the first time you index this document, you will get: 1)
    long _version = response.getVersion();
    // status has stored current instance statement.
    RestStatus status = response.status();
  • 相关阅读:
    random,time,os
    内置函数
    迭代器,生成器,开放封闭原则,列表推导式
    函数的有用信息
    装饰器
    动态参数,作用域,闭包
    初始函数def
    python之文件操作
    “SLR”指人造卫星激光测距,“VLBI”指甚长基线干涉测量。
    解压软件使用方法
  • 原文地址:https://www.cnblogs.com/xiaocandou/p/8117438.html
Copyright © 2020-2023  润新知