java - 在java中访问嵌套的elasticsearch字段

标签 java nested elasticsearch

到目前为止,我按照 this guide 获取了与 elasticsearch 一起使用的 native java 脚本。使用 doc().field("fieldname") 可以正常访问正常的非嵌套字段。

嵌套字段是否同样有效?我如何遍历它们并访问嵌套字段?

编辑:阅读下面 imotov 的回答后,我最终使用 include_in_rootinclude_in_parent 在根文档中包含嵌套字段(参见 docs) .

GeoPoint[] locations = ((GeoPointDocFieldData)doc().field("places.location")).getValues();

for (GeoPoint location : locations) {
    // Do Stuff
    double lat = location.lat();
    double lon = location.lon();
}

最佳答案

这是一个艰难的过程。嵌套对象在内部作为单独的文档进行索引,因此顶级 custom_filters_score 在根对象上运行并且无权访问嵌套对象。但是您可以做一些事情。

我认为最好的选择是将 custom_filters_score 移动到嵌套过滤器中,您的脚本将在嵌套对象上运行。参见 Elastic search - tagging strength (nested/child document boosting)举个例子。

第二个选项是将嵌套对象映射的 include_in_root 设置设置为 true。这样,所有嵌套对象字段也将在根对象中建立索引,并且您将能够使用点符号访问它们:places.location,就好像没有嵌套一样。此选项的问题是您必须对字段进行两次索引,并且您不知道哪个嵌套对象与您的嵌套查询匹配。

第三个选项是从源中检索嵌套对象字段。如果您的搜索产生大量结果,这将非常缓慢且不适用。

关于java - 在java中访问嵌套的elasticsearch字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778148/

相关文章:

java - 就得出解决方案而言,我的程序中的逻辑是否接近?

java - 使用 Android 时,项目似乎无法上传到 Firebase 实时数据库

c++ - 递归嵌套初始值设定项列表采用变体

elasticsearch - 如何在 ES 中获取字段的不同值?

java - 从我的 JButtons 获取颜色

.net-3.5 - .NET 3.5 上的并行 - 线程未在嵌套中完成任务

java - 如何编写一个输出三角形数字的java程序?

elasticsearch - camel-elasticsearch 2.11.x不能远程工作吗?

elasticsearch - Django Haystack 自动查询 : no results with HAYSTACK_DEFAULT_OPERATOR = 'AND'

java - 如何让 CountDownTimer 计数到 1?