我正试图从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?
非常感谢任何正确方向的帮助或指针。
感谢。
答案 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作为依赖。