小编sko*_*ohn的帖子

XContentBuilder内部对象的Elasticsearch映射

我正在尝试为以下结构的文档创建映射:

"name":"Peter"
"id":"ABC123",  
"values":{
    "a":3.0123,        
    "b":1234
}
Run Code Online (Sandbox Code Playgroud)

因此映射应如下所示:

{
 "properties":{"_all":{"enabled":"false"},
 "dynamic":"false",
 "_timestamp":{"enabled":true,"store":true},
 "properties": {
     "name":{"type":"string"},
     "id":{"type":"string"},
     "values": {
         "properties": {
              "a": {"type":"double"},
              "b":{"type":"double"}
          }
     }
   } 
  }
}
Run Code Online (Sandbox Code Playgroud)

实际上,"值"中可能属性的数量非常大,假设我必须包含50个可能的属性.

我目前正在使用XContentBuilder生成映射json,这对我来说非常好.

我想要做的是,将内部部件的映射封装在单独的构建器中的"值"中,因为它使得映射过程更容易为我维护.此外,我已经在列表中有内部属性的名称,我想迭代它.

这是我的法线贴图代码.

XContentBuilder xbMapping = jsonBuilder()
            .startObject() // start root
                .startObject(PROPERTIES)
                    .startObject("_all").field("enabled", "false").endObject()
                    .field("dynamic", "false")
                    .startObject("_timestamp").field("enabled", true).field("store", true).endObject()
                    .startObject(PROPERTIES)
                        .startObject("name").field("type", "string").endObject()
                        .startObject("id").field("type", "string").endObject()
                        .startObject("values")
                            .startObject(PROPERTIES)
                                 // INNER MAPPING HERE!!
                            .endObject()
                        .endObject()
                .endObject()
            .endObject();
Run Code Online (Sandbox Code Playgroud)

我想避免在那些startObject和endObject之间进行迭代,更喜欢在其他地方进行内部类型的完整映射,并在那里包含那个额外的部分.

我现在用XContentBuilder找不到复杂的方法.

谢谢你的任何提示

mapping elasticsearch

6
推荐指数
1
解决办法
1万
查看次数

Elasticsearch 查询“空索引”

在我的应用程序中,我使用了几个 elasticsearch 索引,它们在初始状态下不包含索引文档。我认为这可以称为“空”:) 文档的映射正确且有效。

该应用程序还有一个包含实体的关系数据库,这些实体可能具有在 elasticsearch 中关联的文档。

在应用程序的初始状态,只有实体没有文档是很常见的,因此没有一个文档被索引,因此是“空索引”。尽管如此,索引已被创建,并且文档的映射也已被放入索引并存在于索引元数据中。

无论如何,当我使用 SearchQuery 查询 elasticsearch 以查找实体之一的文档(该文档包含来自实体的唯一 id)时,elasticsearch 将抛出 ElasticSearchException,它抱怨字段 xy 等不存在映射。

但是,如果我首先将一个空白文档插入索引中,则查询不会失败。

有没有办法“初始化”索引以防止查询失败并摆脱愚蠢的“虚拟文档解决方法”?

更新:另外,使用虚拟文档的解决方法会污染索引,例如,计数查询现在总是返回 +1....所以我也向解决方法添加了删除...

mapping indexing search exception elasticsearch

1
推荐指数
1
解决办法
5829
查看次数

标签 统计

elasticsearch ×2

mapping ×2

exception ×1

indexing ×1

search ×1