如何在弹性搜索中强制执行必填字段?

7 elasticsearch

我正在后端使用弹性搜索构建一个 cms,我的团队决定使用弹性搜索。我是新手。我主要在以前的项目中使用 mongoose 和 mongodb。在 mongodb 中,如果我错误地分配了一个字段或完全跳过了一个必填字段,mongodb 会抛出错误。

有没有办法在 elasticsearch 中强制执行必填字段?

Mys*_*ion 7

没有内置功能,这将允许您在映射中定义必填/必填字段。许多人会建议您在客户端进行检查。

但是,在 Elasticsearch 5.x 中,您可以使用 Ingest 节点来实现这一点。

您可以使用摄取节点在实际索引发生之前预处理文档。这种预处理由一个摄取节点发生,该节点拦截批量和索引请求,应用转换,然后将文档传递回索引或批量 API。

要在索引之前预处理文档,您需要定义一个指定一系列处理器的管道。每个处理器都以某种方式转换文档。

一个例子,显示了使用这种方法的可能性。

POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
        "script": {
          "lang": "painless",
          "inline": "if (ctx.title == null) { throw new Exception('Document does not have the *title* field') }"
        }
      }
    ]
  },
  "docs": [
    {
      "_index": "index",
      "_type": "type",
      "_id": "1",
      "_source": {
        "title": "Elasticsearch 101"
      }
    },
    {
      "_index": "index",
      "_type": "type",
      "_id": "2",
      "_source": {
        "company": "Elastic"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看这里 - https://www.elastic.co/guide/en/elasticsearch/reference/5.2/ingest.html

  • Elasticsearch `7.x` 中有什么新的东西吗? (3认同)