0

我正在尝试创建一个弹性搜索映射,它将数组数据类型的长度限制为 x 个项目。

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

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

4

2 回答 2

1

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

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

希望这可以帮助!

于 2018-05-08T14:36:24.993 回答
0

谢谢洪扎!

我最终是这么假设的……为了扩展您的答案,这就是我现在插入/索引文档的方式:

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

我正在使用脚本字段,结合“无痛”语言在索引文档之前检查字段长度。

请注意,我在上面的示例中使用了 Python Elasticsearch 库的批量帮助程序,这就是您看到“_op_type”字段的原因。

于 2018-05-08T15:52:27.940 回答