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>通过该SearchHit#fields方法返回a。

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

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

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

于 2013-02-25T19:04:14.697 回答