ElasticSearch相当于Solr getBeans

im8*_*bit 5 java solr elasticsearch

我正试图从Solr转到Elasticsearch,我一直在将我使用Solr的一些类转换为Elasticsearch但是现在我陷入了困境.

在Solr,我曾经有过:

QueryResponse response = getServer().query(myQuery);
List<MyClass> result = response.getBeans(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

就是这样,我得到了一个我可以使用MyClass对象的List,但是我没有找到ElasticSearch java API中的getBeans的等价物,是否有类似的东西,或者我必须得到结果源

searchHit.getSourceAsString();
Run Code Online (Sandbox Code Playgroud)

要么

searchHit.getSource();
Run Code Online (Sandbox Code Playgroud)

并解析结果以创建我自己的bean?

任何帮助或指针在正确的方向将非常感激.

谢谢.

jav*_*nna 5

Elasticsearch允许您以不同的格式阅读整个源代码,其中最有趣的是:

  • 作为String通过SearchHit#sourceAsString方法
  • 作为Map<String, Object> 通过SearchHit#sourceAsMap方法

请注意,源不是获取结果的唯一方法:您还可以请求某些特定字段,这些字段可以存储在lucene中,也可以在未存储时从源自动加载.然后你会Map<String, SearchHitField>通过这个SearchHit#fields方法回来.

Elasticsearch比Solr更加面向json,提供了高度优化的方式来读取和生成json对象.据我所知,没有开箱即用的方法可以直接从SearchHit使用Java API 获取Java对象.曾经有一个有趣的osem项目似乎做了类似于你正在寻找的东西,但它似乎不再被维护.

如果您确实需要,可以使用不同的库将Json对象转换为Java对象.elasticsearch本身在内部使用杰克逊.

否则,Java API的替代方案是Jest客户端,它允许将文档索引和检索为POJO.但在这种情况下,您将使用一个外部库,它将Rest调用发送到elasticsearch而不是Java API,它们非常强大.另一方面,您不需要将整个elasticsearch作为依赖项.