java - ElasticSearch 相当于 Solr getBeans

标签 java solr elasticsearch

我正在尝试从 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/

相关文章:

java - Spring-MVC/JPA。从数据库中提取数据后没有结果

java - 在 hadoop 的提示符下创建和运行可运行的 jar

solr - solr 查询字符串中的负运算符(NOT,- , !)不适用于括号

Solr JWT 认证插件配置

elasticsearch - 长度大于20的elasticsearch查询文本字段

elasticsearch - 如何结合 “AND”和 “OR”查询来获得两者的结果?

java - 尝试将两个 ArrayList 对象链接在一起

Solr 返回 HTTP 错误 400 或 500

Elasticsearch 5.4 : Use normal and nested fields in same Painless script query?

java - public static int getCoins(int[][] map, int row, int col) 方法