web-dev-qa-db-ja.com

elasticsearchオブジェクトをインデックスに挿入する

Elasticsearchは初めてで、Java APIを使用して少しの助けを探しています。ドメインオブジェクトがいくつかあります。

@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に変換する必要がありますが、これは理想的な状況ではありません。

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

乾杯、ロブ

18
Rob

私はあなたが正しい軌道に乗っていると思います。 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 でより詳細な例を示しています。

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

29
Andy