Powered by Google App Engine

elasticsearch

 

elasticsearch for java api(キーのみの操作編)

elasticsearchのjava apiでインデックスを操作します。調査中なので、キーを使ったシンプルな操作を試してみます。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

Elasticsearch Guilde

mavenを使う前提とすると、pomをいじるだけです。

<dependency>
	<groupId>org.elasticsearch</groupId>
	<artifactId>elasticsearch</artifactId>
	<version>0.90.0.RC1</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.1.4</version>
</dependency>

clientが無いと検索できないので、生成します。

Node node = nodeBuilder().local(false).node();
Client client = node.client();

以降のサンプルは、clientを事前に生成してある状態としています。

private void indexing(String id) {
    try {
        IndexResponse response = client
                .prepareIndex("twitter", "tweet", id)
                .setSource(
                        jsonBuilder().startObject().field("user", "名前").field("postDate", new Date())
                                .field("message", "メッセージです").endObject()).setOperationThreaded(false).execute()
                .actionGet();
    } catch (ElasticSearchException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

なんとなくs2jdbcの流れるようなインターフェースっぽいですね。

private void search(String id) {
    GetResponse rsp = client.prepareGet("twitter", "tweet", id).setOperationThreaded(false).execute().actionGet();
    System.out.println("【" + rsp.getId() + "】" + rsp.getSource());
}
↓↓↓
【1】{message=メッセージです, postDate=2013-04-17T15:14:07.153Z, user=名前}
private void delete(String id) {
    DeleteResponse response = client.prepareDelete("twitter", "tweet", id).
        setOperationThreaded(false).execute().actionGet();
}
private void bulkInsert() {
    BulkRequestBuilder bulkRequest = client.prepareBulk();
    try {
        bulkRequest.add(client.prepareIndex("twitter", "tweet", "1").setSource(
                jsonBuilder().startObject().field("user", "鈴木一郎").field("postDate", new Date())
                        .field("message", "AAAA").endObject()));
        bulkRequest.add(client.prepareIndex("twitter", "tweet", "2").setSource(
                jsonBuilder().startObject().field("user", "鈴木二郎").field("postDate", new Date())
                        .field("message", "BBBB").endObject()));
        bulkRequest.add(client.prepareIndex("twitter", "tweet", "3").setSource(
                jsonBuilder().startObject().field("user", "鈴木三郎").field("postDate", new Date())
                        .field("message", "CCCC").endObject()));

        BulkResponse response = bulkRequest.execute().actionGet();
        if (response.hasFailures()) {
            System.out.println(response.buildFailureMessage());
        }
    } catch (ElasticSearchException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

solrと同様に、既に同一のキーのデータが存在する場合は上書きになるようです。

private void bulkDelete() {
    BulkRequestBuilder bulkRequest = client.prepareBulk();
    bulkRequest.add(client.prepareDelete("twitter", "tweet", "1"));
    bulkRequest.add(client.prepareDelete("twitter", "tweet", "2"));
    BulkResponse response = bulkRequest.execute().actionGet();
    if (response.hasFailures()) {
        System.out.println(response.buildFailureMessage());
    }
}
◯ 広告