title: elasticsearch create or update document using python
body: <p>I am using <a href="https://elasticsearch-py.readthedocs.org/en/master/" rel="noreferrer">elasticsearch-py</a> for elasticsearch operation.</p>
  
  <p>I am trying for <a href="http://elasticsearch-py.readthedocs.org/en/master/helpers.html#elasticsearch.helpers.bulk" rel="noreferrer"><code>elasticsearch.helpers.bulk</code></a> to create or update multiple records.</p>
  
  <pre><code>from elasticsearch import Elasticsearch
  from elasticsearch import helpers
  es = Elasticsearch()
  
  data = [
      {
          "_index": "customer",
          "_type": "external",
          "_op_type": "create",
          "_id": 3,
          "doc" : {"name": "test"}
      },
      {
          "_index": "customer",
          "_type": "external",
          "_op_type": "create",
          "_id": 4,
          "doc" : {"name": "test"}
      },
      {
          "_index": "customer",
          "_type": "external",
          "_op_type": "create",
          "_id": 5,
          "doc" : {"name": "test"}
      },
      {
          "_index": "customer",
          "_type": "external",
          "_op_type": "create",
          "_id": 6,
          "doc" : {"name": "test"}
      },
  ]
  
  
  print helpers.bulk(es, data)
  </code></pre>
  
  <p>Is there any way to perform this operation?</p>
  
  <p>Now we can give only <code>_op_type</code> as <code>create</code> or <code>update</code>. If we give <code>update</code> and record is not exist, then it will raise error.</p>
  
  <pre><code>Traceback (most recent call last):
    File "/tmp/test.py", line 37, in &lt;module&gt;
      print helpers.bulk(es, data)
    File "/local/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 182, in bulk
      for ok, item in streaming_bulk(client, actions, **kwargs):
    File "/local/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 155, in streaming_bulk
      raise BulkIndexError('%i document(s) failed to index.' % len(errors), errors)
  elasticsearch.helpers.BulkIndexError: ('4 document(s) failed to index.', [{u'update': {u'status': 404, u'_type': u'external', u'_id': u'3', u'error': u'DocumentMissingException[[customer][-1] [external][3]: document missing]', u'_index': u'customer'}}, {u'update': {u'status': 404, u'_type': u'external', u'_id': u'4', u'error': u'DocumentMissingException[[customer][-1] [external][4]: document missing]', u'_index': u'customer'}}, {u'update': {u'status': 404, u'_type': u'external', u'_id': u'5', u'error': u'DocumentMissingException[[customer][-1] [external][5]: document missing]', u'_index': u'customer'}}, {u'update': {u'status': 404, u'_type': u'external', u'_id': u'6', u'error': u'DocumentMissingException[[customer][-1] [external][6]: document missing]', u'_index': u'customer'}}])
  </code></pre>