18

私はelasticsearchを初めて使用し、JavaAPIを使用して少し助けを求めています。私はいくつかのドメインオブジェクトを持っています例えば

@XmlRootElement

public class BasicActivity {

private String activityName;
private FullActivity activity;  
// Getters and setters
}

ノードに接続されたトランスポートクライアントを作成しました

Client client = new TransportClient()
        .addTransportAddress(new InetSocketTransportAddress("192.168.0.198",9300));

オブジェクトをelasticsearchに直接挿入する簡単な方法はありますか?

私はこれを見ました

IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
                    .setSource(jsonBuilder()
                                .startObject()
                                    .field("user", "kimchy")
                                    .field("postDate", new Date())
                                    .field("message", "trying out Elastic     Search")
                                .endObject()
                              )
                    .execute()
                    .actionGet();

しかし、それを行うには、すべてのオブジェクトをjsonに変換する必要があります。これは、可能ではありますが、私の理想的な状況ではありません。

それが(アーキテクチャ的に)どのように機能するかについて誤解がある場合は、私に知らせてください、私は学ぶためにここにいます!

乾杯、ロブ

4

1 に答える 1

33

あなたは正しい軌道に乗っていると思います。Java API は、慣れていないと取得するのが難しい場合があります。時間が経てば良くなると思います。

オブジェクトを ElasticSearch クラスターに送信するには、オブジェクトを Json に変換する必要があります。 Gsonは、それを行うことができる多くの人気のあるライブラリの 1 つです。

上記のコードはインデックスを作成します。そのインデックスにドキュメントを追加するには、次のように実行します。

   Tweet tweet = new Tweet();
   tweet.setId("1234");
   tweet.setMessage("message");

   IndexRequest indexRequest = new IndexRequest("twitter","tweet", tweet.getId());
   indexRequest.source(new Gson().toJson(tweet));
   IndexResponse response = client.index(indexRequest).actionGet();

複数のアイテムを一度にインデックス化する場合は、 BulkRequestを確認してください。オブジェクトがより複雑になったら、Mappingsを作成する必要があります。

Guideで素晴らしい例を見つけましたが、通常はES Google Groupでより詳細な例を見つけました。

ヘッドフロントエンドもお勧めです。既存のインデックスとアイテムが表示されます。

于 2011-11-16T17:47:57.090 に答える