映射以限制 Elasticsearch 中 Array 数据类型的长度
Mapping to limit length of Array datatype in Elasticsearch
我正在尝试创建一个 elasticsearch 映射,它将数组数据类型的长度限制为 x 个项目。
mapping = """
{
"mappings": {
"document": {
"properties": {
"pages": {
"type": "text"
}
}
}
}
}
}
"""
在这种情况下,如何将 "pages" 数组设置为最多包含 1,000 个列表项?另外,有没有办法 "ignore" 在达到此限制时插入由 ES 触发的错误?
Elasticsearch 没有这样的限制,您必须在您的应用程序中强制执行。
至于忽略错误,请查看许多字段的 ignore_malformed
选项。
希望对您有所帮助!
谢谢洪扎!
我最终是这么认为的……为了扩展您的答案,这就是我现在 inserting/indexing 文档的方式:
data = {
"_op_type": "index",
"_index" : "myIndex",
"_type" : "document",
'script' : {
'inline': 'if(ctx._source.pages.length < 1001){ ctx._source.pages.add(params.page);}',
'params' : {
"page" : "{}".format(item['page'])
}
}
}
我正在使用脚本字段,结合 "painless" 语言在索引文档之前检查字段长度。
请注意,我在上面的示例中使用了 Python Elasticsearch 库的批量助手,这就是您看到“_op_type”字段的原因。
我正在尝试创建一个 elasticsearch 映射,它将数组数据类型的长度限制为 x 个项目。
mapping = """
{
"mappings": {
"document": {
"properties": {
"pages": {
"type": "text"
}
}
}
}
}
}
"""
在这种情况下,如何将 "pages" 数组设置为最多包含 1,000 个列表项?另外,有没有办法 "ignore" 在达到此限制时插入由 ES 触发的错误?
Elasticsearch 没有这样的限制,您必须在您的应用程序中强制执行。
至于忽略错误,请查看许多字段的 ignore_malformed
选项。
希望对您有所帮助!
谢谢洪扎!
我最终是这么认为的……为了扩展您的答案,这就是我现在 inserting/indexing 文档的方式:
data = {
"_op_type": "index",
"_index" : "myIndex",
"_type" : "document",
'script' : {
'inline': 'if(ctx._source.pages.length < 1001){ ctx._source.pages.add(params.page);}',
'params' : {
"page" : "{}".format(item['page'])
}
}
}
我正在使用脚本字段,结合 "painless" 语言在索引文档之前检查字段长度。
请注意,我在上面的示例中使用了 Python Elasticsearch 库的批量助手,这就是您看到“_op_type”字段的原因。