elasticsearch的javaAPI之index

Index API

原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/index_.html

index API允许你将JSON document转换为一个特定的index,使它便于搜索操作。

生成JSON文档:

有几种不同的方法生成一个JSON document:

  • 手动使用 byte[] String
  • 使用一个map来等效转换为JSON
  • 使用第三方库来将beans装换(如Jackson)
  • 使用内置的XContentFactory.jsonBuilder()

在内部,每一个类型转换为 byte[] (所以String转换到byte[])。 因此,如果对象是已经在这个形式, 就直接使用它。
jsonBuilder 是高度优化的JSON生成机制,用来直接构造为byte[]

动手试一试:

这里没有特别困难的,但请注意,您将必须根据DateFormate来格式化日期。

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

使用map

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");

序列化beans

Elasticsearch已经使用jackson,在org.elasticsearch.common.jackson 包中。 所以,你可以添加自己Jackson版本到
pom.xml 文件或在你的classpath中。

例如:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.1.3</version>
</dependency>

然后,您可以开始序列化JSON bean:

import com.fasterxml.jackson.databind.*;

// instance a json mapper
ObjectMapper mapper = new ObjectMapper(); // create once, reuse

// generate json
String json = mapper.writeValueAsString(yourbeaninstance);

使用Elasticsearch helpers

Elasticsearch提供了内置的帮手来生成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(String)endArray() 方法。 顺便说一下,
field方法 接受很多对象类型。 你可以直接使用数字、日期,甚至其他XContentBuilder对象。

如果你需要看生成的JSON内容,您可以使用string()方法。

String json = builder.string();

Indexdocument:

下面的示例索引将JSON document转换为一个索引 (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()
                  )
        .execute()
        .actionGet();

请注意,您也可以index document作为JSON Strings,你不用给一个ID:

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

IndexResponse response = client.prepareIndex("twitter", "tweet")
        .setSource(json)
        .execute()
        .actionGet();

IndexResponse 对象将给你一个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();

如果你使用percolation构造索引, IndexResponse对象会给相应的过滤器:

IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
        .setSource(json)
        .execute()
        .actionGet();

List<String> matches = response.matches();

Operation threading:

Index API允许你设置线程来执行操作,实际执行API上执行的是相同的节点(API上执行一个分配在同一服务器的shard上)。

不同的线程上执行操作,或调用线程执行(注意,API仍然是异步)。默认情况下, operationThreaded 被设置为true,这意味着操作是由不同的线程上执行。

原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/index_.html

翻译欠佳,希望不会对大家造成误导

时间: 2024-08-23 10:28:50

elasticsearch的javaAPI之index的相关文章

elasticsearch的javaAPI之query

elasticsearch的javaAPI之query API the Search API允许执行一个搜索查询,返回一个与查询匹配的结果(hits). 它可以在跨一个或多个index上执行, 或者一个或多个types. 查询可以使用提供的 query Java API 或filter Java API . 搜索请求的主体是建立使用 SearchSourceBuilder上. 这里有一个例子: import org.elasticsearch.action.search.SearchRespon

Elasticsearch的javaAPI之percolator

percolator允许一个在index中注册queries,然后发送包含doc的请求,返回得到在index中注册过的并且匹配doc的query //This is the query we're registering in the percolator QueryBuilder qb = termQuery("content", "amazing"); //Index the query = register it in the percolator clien

Elasticsearch的javaAPI之facet,count,delete by query

Elasticsearch的javaAPI之count count API允许轻松地执行一个查询,获得匹配的数量,可以跨越一个或多个index ,一个或多个type. import static org.elasticsearch.index.query.xcontent.FilterBuilders.*; import static org.elasticsearch.index.query.xcontent.QueryBuilders.*; CountResponse response =

Elasticsearch的javaAPI之get,delete,bulk

Elsasticsearch的javaAPI之get get API允许根据其id获得指定index中的基于json document.下面的例子得到一个JSON document(index为twitter,type为tweet,id为价值1) GetResponse response = client.prepareGet("twitter", "tweet", "1")         .execute()         .actionG

ElasticSearch的javaAPI之Client

翻译的原文:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/client.html#node-client 翻译ElasticSearch的javaAPI之Client 本节描述了elasticsearch提供的Java API,所有elasticsearch操作使用client对象执行. 所有的操作在本质上是完全asynchronous(接受一个listener,或返回一个future).

Elasticsearch的javaAPI之query dsl-queries

和rest query dsl一样,elasticsearch提供了一个完整的Java query dsl. 查询建造者(factory)是 QueryBuilders . 一旦准备好您的查询,您可以使用query api. 如何使用QueryBuilders?仅仅就是加入下面的包: import org.elasticsearch.index.query.QueryBuilders.*; 请注意,您可以轻松地打印(又名调试) 查询生成的JSON,用 toString()方法 QueryBuil

Elasticsearch 【索引模板 index templates】

https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-templates.html 一. 索引模板,定义模板,当新索引创建时,自动匹配,并应用定义的模板 新增索引模板(index templates) 我们新建一个索引模板template_1 设置它的主分片为1个.类型有type1且_source disabled PUT /_template/template_1 {   "template": &qu

Elasticsearch的javaAPI之Query DSL-filters

和REST query dsl一样,elasticsearch提供了一个完整的Java query dsl. 工厂过滤器建造者是FilterBuilders 一旦准备好您的查询,就可以使用query api. 如何构建查询?使用FilterBuilders,导入它们在你的类: import org.elasticsearch.index.query.FilterBuilders.*; 请注意,在FilterBuilder对象上可以轻松地打印(又名调试) 查询生成的JSON,用 toString(

elasticsearch报InvalidIndexNameException[Invalid index name [demo_indexX1], must be lowercase错误

[demo_indexX1] InvalidIndexNameException[Invalid index name [demo_indexX1], must be lowercase] at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService.validateIndexName(MetaDataCreateIndexService.java:151) at org.elasticsearch.cluster.metada