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

时间:2017-03-21 13:07:57

标签: elasticsearch

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

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

1 个答案:

答案 0 :(得分:2)

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

但是,在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"
      }
    }
  ]
}

有关详细信息,请查看此处 - https://www.elastic.co/guide/en/elasticsearch/reference/5.2/ingest.html