ElasticSearch:映射必需(非动态)字段但有一个 属性 ("meta data") 动态
ElasticSearch: map required (non-dynamic) fields but have one property ("meta data") dynamic
我想创建一个索引来保存一些代表文章的内容。
一篇文章由title
、excerpt
、body
、publish_date
和meta
组成。所有这些都是必需的,除了 Meta。我不希望设置其他属性。
此外,我希望“meta
”能够保存放入其中的任何数据。
我尝试将文章的动态参数设置为 false,然后将元对象设置为 true,但没有成功。 (例子可以在下面看到)
(注意:我知道使用这样的元意味着数组的所有值都将是相同的数据类型,我对此没有意见。)
{
"mappings": {
"article": {
"type":"object",
"dynamic" : "false",
"properties": {
"title": {"type": "string"},
"excerpt": {"type": "string"},
"body": {"type": "string"},
"publish_date": {"type": "date"},
"meta": {
"type": "object"
"dynamic" : "true",
"properties": {
}
}
}
}
}
}
TL:DR - 如何定义一个映射,使某些属性成为必需,但留下一个 属性(元 array/object)打开以供填充,同时防止任何不需要在元对象之外设置的 属性。
事实证明这是一个简单的错误,导致功能无法正常触发。
使用下面的 JSON,在初始文章映射上将动态 属性 设置为严格,并将 "meta-stash" 动态 属性 设置为 true,实际上确实给出了所需的功能。
原来使用 false
,而不是 strict
,也禁止抛出异常,导致最初的混乱。
因此,正如文档中所述,
true
:动态添加新字段——默认
false
: 忽略新字段
strict
: 遇到未知字段抛出异常
正确映射:
{
"mappings": {
"article": {
"type":"object",
"dynamic" : "strict",
"properties": {
"title": {"type": "string"},
"excerpt": {"type": "string"},
"body": {"type": "string"},
"publish_date": {"type": "date"},
"meta": {
"type": "object"
"dynamic" : "true",
}
}
}
}
}
我想创建一个索引来保存一些代表文章的内容。
一篇文章由title
、excerpt
、body
、publish_date
和meta
组成。所有这些都是必需的,除了 Meta。我不希望设置其他属性。
此外,我希望“meta
”能够保存放入其中的任何数据。
我尝试将文章的动态参数设置为 false,然后将元对象设置为 true,但没有成功。 (例子可以在下面看到)
(注意:我知道使用这样的元意味着数组的所有值都将是相同的数据类型,我对此没有意见。)
{
"mappings": {
"article": {
"type":"object",
"dynamic" : "false",
"properties": {
"title": {"type": "string"},
"excerpt": {"type": "string"},
"body": {"type": "string"},
"publish_date": {"type": "date"},
"meta": {
"type": "object"
"dynamic" : "true",
"properties": {
}
}
}
}
}
}
TL:DR - 如何定义一个映射,使某些属性成为必需,但留下一个 属性(元 array/object)打开以供填充,同时防止任何不需要在元对象之外设置的 属性。
事实证明这是一个简单的错误,导致功能无法正常触发。
使用下面的 JSON,在初始文章映射上将动态 属性 设置为严格,并将 "meta-stash" 动态 属性 设置为 true,实际上确实给出了所需的功能。
原来使用 false
,而不是 strict
,也禁止抛出异常,导致最初的混乱。
因此,正如文档中所述,
true
:动态添加新字段——默认false
: 忽略新字段strict
: 遇到未知字段抛出异常
正确映射:
{
"mappings": {
"article": {
"type":"object",
"dynamic" : "strict",
"properties": {
"title": {"type": "string"},
"excerpt": {"type": "string"},
"body": {"type": "string"},
"publish_date": {"type": "date"},
"meta": {
"type": "object"
"dynamic" : "true",
}
}
}
}
}