映射以限制Elasticsearch中Array数据类型的长度

时间:2018-05-07 18:12:26

标签: elasticsearch elasticsearch-py

我正在尝试创建一个elasticsearch Mapping,它将数组数据类型的长度限制为x个项目。

mapping = """
{
"mappings": {
        "document": {
            "properties": {
                "pages": {
                    "type": "text"
               }
            }
        }
    }
}
}
"""

在这种情况下,如何将“pages”数组设置为最多包含1,000个列表项?此外,有没有办法在达到此限制时“忽略”由ES触发的插入错误?

2 个答案:

答案 0 :(得分:1)

Elasticsearch没有这样的限制,您必须在您的应用程序中强制执行它。

至于忽略错误,请查看许多字段的ignore_malformed选项。

希望这有帮助!

答案 1 :(得分:0)

感谢Honza!

我最终假设...扩展你的答案,这就是我现在如何插入/索引文档:

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'])
                }
            }   
        }

我使用脚本字段,结合&#34;无痛&#34;在索引文档之前检查字段长度的语言。

注意,我在上面的例子中使用了Python Elasticsearch库的批量助手,这就是为什么你会看到&#34; _op_type&#34;字段。