5

Solr から Elasticsearch に移行しようとしています。Solr で作業していたいくつかのクラスを Elasticsearch に変換していますが、現在はこれで行き詰まっています。

Solrでは、以前は次のものがありました:

QueryResponse response = getServer().query(myQuery);
List<MyClass> result = response.getBeans(MyClass.class);

それだけで、使用できる MyClass オブジェクトを含むリストを取得しましたが、ElasticSearch Java API で getBeans に相当するものが見つかりませんでした。類似したものがあるか、結果ソースを取得する必要があります

searchHit.getSourceAsString();

また

searchHit.getSource();

結果を解析して独自の Bean を作成しますか?

正しい方向へのヘルプやポインタは非常に高く評価されます。

ありがとう。

4

1 に答える 1

5

Elasticsearch を使用すると、ソース全体をさまざまな形式で読み取ることができます。その中で最も興味深いものは次のとおりです。

  • 方法としてString_SearchHit#sourceAsString
  • 方法としてMap<String, Object> _SearchHit#sourceAsMap

結果を取得する方法はソースだけではないことに注意してください。lucene に保存するか、保存されていないときにソースから自動的にロードできる特定のフィールドを要求することもできます。次にMap<String, SearchHitField>、メソッドを介してa を取得しますSearchHit#fields

Elasticsearch は Solr よりも単純に JSON 指向であり、json オブジェクトを読み取って生成するための高度に最適化された方法を提供します。私の知る限りSearchHit、Java API を使用して Java オブジェクトを直接取得するすぐに使える方法はありません。以前は、探しているものと似たようなことをしているように見える興味深いosem プロジェクトがありましたが、もう維持されていないようです。

本当に必要な場合は、Json オブジェクトを Java オブジェクトに変換するさまざまなライブラリがあります。elasticsearch 自体は、Jackson を内部的に使用しています。

それ以外の場合、Java API の代替手段はJest クライアント です。これは、ドキュメントのインデックス作成と取得の両方を POJO として許可します。しかし、この場合、非常に強力な Java API の代わりに、elasticsearch に Rest 呼び出しを送信する外部ライブラリを使用することになります。一方で、elasticsearch 全体を依存関係として必要としません。

于 2013-02-25T19:04:14.697 に答える