Elasticsearch 映射中的使用条件
Use condition in Elasticsearch mapping
我想知道在定义索引的映射时是否可以使用条件,因为根据某个字段的某些值,然后需要其他字段。
例如:
PUT /my-index
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" },
"is_external": {"type": "boolean" }
if [is_external] == true {
"adress": { "type": "text" },
"date": { "type": "date" }
}
}
}
}
如果没有办法,我该如何处理?
在映射级别进行这种检查没有意义,因为最终您的索引将包含带有 is_external: true
和 is_external: false
的文档,因此映射也必须包含文档的 address
和 date
字段定义,其中 is_external: true
并且每个索引只能有一个映射。
如果你想强制 is_external: true
的文档也包含 address
和 date
字段,那么你可以使用摄取管道 with a drop
processor 来做到这一点:
...
{
"drop": {
"if" : "ctx.is_external == true && (ctx.date == null || ctx.address == null)"
}
}
我想知道在定义索引的映射时是否可以使用条件,因为根据某个字段的某些值,然后需要其他字段。
例如:
PUT /my-index
{
"mappings": {
"properties": {
"age": { "type": "integer" },
"email": { "type": "keyword" },
"name": { "type": "text" },
"is_external": {"type": "boolean" }
if [is_external] == true {
"adress": { "type": "text" },
"date": { "type": "date" }
}
}
}
}
如果没有办法,我该如何处理?
在映射级别进行这种检查没有意义,因为最终您的索引将包含带有 is_external: true
和 is_external: false
的文档,因此映射也必须包含文档的 address
和 date
字段定义,其中 is_external: true
并且每个索引只能有一个映射。
如果你想强制 is_external: true
的文档也包含 address
和 date
字段,那么你可以使用摄取管道 with a drop
processor 来做到这一点:
...
{
"drop": {
"if" : "ctx.is_external == true && (ctx.date == null || ctx.address == null)"
}
}