我正在尝试从 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?
任何正确方向的帮助或指示将不胜感激。
谢谢。
最佳答案
Elasticsearch 允许您以不同的格式阅读整个源代码,其中对您来说最有趣的是:
- 作为
String
通过SearchHit#sourceAsString
方法 - 作为
Map<String, Object>
通过SearchHit#sourceAsMap
方法
请注意,源不是获取结果的唯一方法:您还可以请求一些特定的字段,这些字段可以存储在 lucene 中,或者在未存储时自动从源加载。然后你会得到一个 Map<String, SearchHitField>
通过SearchHit#fields
方法。
Elasticsearch 比 Solr 更面向 json,提供高度优化的方式来读取和生成 json 对象。据我所知,没有现成的方法可以直接从 SearchHit
返回 Java 对象。使用 Java API。曾经有一个有趣的osem project这似乎与您正在寻找的东西类似,但似乎不再维护。
如果您确实需要,可以使用不同的库将 Json 对象转换为 Java 对象。 elasticsearch 本身在内部使用 Jackson。
否则,Java API 的替代方法是 Jest client ,它确实允许将文档作为 POJO 进行索引和检索。但在这种情况下,您将使用外部库将 Rest 调用发送到 elasticsearch,而不是非常强大的 Java API。另一方面,您不需要整个 elasticsearch 作为依赖项。
关于java - ElasticSearch 相当于 Solr getBeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15070407/