Как получить идентификатор auto increment для elasticsearch

Мне нужно сохранить уникальный идентификатор auto increment вместе с остальными полями моего документа в ElasticSearch. Есть ли в ElasticSearch, чтобы получить их.

Я нашел это в качестве потенциального решения: http://blogs.perl.org/users/clinton_gormley/2011/10/elasticsearchsequence---a-blazing-fast-ticket-server.html

Но я просто удивляюсь, есть ли лучший способ?

Ответы

Ответ 2

Здесь другой способ использования elasticsearch для создания iids:

Основное преимущество заключается в том, что iid может быть скопирован с помощью простых дампов, где реализация с использованием _version elasticsearch не может выполнить резервное копирование версии.

Он позволяет запросить большую часть iids, чтобы свести к минимуму количество требуемых запросов.

Запрос на получение основной части 10 iids будет выглядеть следующим образом:

curl -XPOST "http://localhost:9200/sequence/sequence/1/_updatefields=iid&retry_on_conflict=5" -d '{
  "script": "ctx._source.iid += bulk_size",
  "params": {
    "bulk_size": 10
  },
  "lang": "groovy",
  "upsert": {
    "iid": 0
  }
}'

Ему нужно это (оптимизированное) отображение для индекса:

curl -XPOST http://localhost:9200/sequence/_mapping -d '{
  "settings": {
    "number_of_shards": 1,
    "auto_expand_replicas": "0-all"
  },
  "mappings": {
    "sequence": {
      "_all": {
        "enabled": 0
      },
      "_type": {
        "index": "no"
      },
      "dynamic": "strict",
      "properties": {
        "iid": {
          "type": "string",
          "index": "no"
        }
      }
    }
  }
}'

Более подробное описание можно найти здесь:

Ответ 3

Как и в Elasticsearch v1.1.0, нет встроенной поддержки автоинкрементных идентификаторов, насколько я знаю. Также официальная документация не упоминает никаких функций, подобных этой.

В блоге, который вы упомянули, используется приемлемый подход. Он имеет преимущество в сохранении последнего идентификатора, который использовался в Elasticsearch. По сравнению с, например, сохраняя значение auto-incremented в Redis или любом другом внешнем источнике данных, вам не нужно беспокоиться о сбое системы в производстве. Тогда нет двух источников данных, которые могут быть не синхронизированы.

Кстати, я реализовал node.js-модуль на основе этого подхода.

Ответ 4

В зависимости от того, чего вы хотите достичь, это может быть вариант - он все еще находится на очень ранних этапах разработки: https://github.com/elastic/elasticsearch/issues/10708