ElasticSearch相当于Solr getBeans

时间:2013-02-25 15:26:38

标签: java solr elasticsearch

我正试图从Solr转到Elasticsearch,我一直在将我使用Solr的一些类转换为Elasticsearch但是现在我已经陷入了这个阶段。

在Solr,我曾经有过:

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

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

searchHit.getSourceAsString();

searchHit.getSource();

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

非常感谢任何正确方向的帮助或指针。

感谢。

1 个答案:

答案 0 :(得分:5)

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

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

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

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

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

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