翻译水平有限,仅供参考
Java API [2.3] » Document APIs » Index API
Index API
Index API让我们能够把一个特定类型的JSON文档索引到特定的index中,以供我们搜索
产生JSON文档
有四种方法产生一个JSON文档:
1、利用字节数组byte[]或字符数String手动产生
2、利用Map类型,Map类会自动转换成内容相同的JSON
3、利用第三方库来序列化实体,如jackson
4、利用内置的XContentFactory.jsonBuilder()
在ES内部,上面的方法都会转换到字节数组byte[]。因此,如果对象已经是字节数组,直接使用即可。
jsonBuilder是一个高度优化的JSON产生器,能够直接构造字节数组byte
1、利用字节数组byte[]或字符数String手动产生
下面这个例子中,需要注意把date手动编码成日期格式
String json = "{" +
"\"user\":\"kimchy\"," +
"\"postDate\":\"2013-01-30\"," +
"\"message\":\"trying out Elasticsearch\"" +
"}";
2、利用Map类型,Map类会自动转换成内容相同的JSON
Map是一个键值对集合。它代表JSON结构
Map<String, Object> json = new HashMap<String, Object>();
json.put("user","kimchy");
json.put("postDate",new Date());
json.put("message","trying out Elasticsearch");
3、利用第三方库来序列化实体,如jackson
ES已经使用了jackson,因此你可以用它来序列化实体
import com.fasterxml.jackson.databind.*;
// instance a json mapper
ObjectMapper mapper = new ObjectMapper(); // create once, reuse
// generate json
byte[] json = mapper.writeValueAsBytes(yourbeaninstance);
4、利用内置的XContentFactory.jsonBuilder()
ES提供了内置的助手来产生JSON
import static org.elasticsearch.common.xcontent.XContentFactory.*;
XContentBuilder builder = jsonBuilder()
.startObject()
.field("user", "kimchy")
.field("postDate", new Date())
.field("message", "trying out Elasticsearch")
.endObject()
注意,你也可以用startArray和endArray来添加数组。而且,field()可以接受多种
对象类型,包括JSON。
如果你需要看JSON的内容,可以使用string()方法。
String json = builder.string();
建立索引
下面是一个例子,把一个JSON文档索引到index为twitter,type为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();
你也可以利用String生成JSON建立索引,并不给定ID
String json = "{" +
"\"user\":\"kimchy\"," +
"\"postDate\":\"2013-01-30\"," +
"\"message\":\"trying out Elasticsearch\"" +
"}";
IndexResponse response = client.prepareIndex("twitter", "tweet")
.setSource(json)
.get();
IndexResponse对象会给你返回结果
// 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();
// isCreated() is true if the document is a new one, false if it has been updated
boolean created = response.isCreated();
想看更多索引操作,可以看REST的index文档
网页链接https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html