Использование чисел в качестве типа в Elasticsearch - PullRequest
1 голос
/ 17 января 2020

Я собираюсь хранить журналы транзакций наasticsearch. Я новичок в стеке ELK и не уверен, как мне реализовать это в стеке ELK. Моя транзакция состоит в последовательной печати строк журнала (upserts), и вместо того, чтобы записывать их в файл, я хочу сохранить их в ElastichSearch, и позже я буду запрашивать журналы по идентификатору транзакции, который я создал.

Обычно URI для запросов будет

/ bookstore / books / _search

, но в моем случае это должно быть похоже на

/ Transactions /actionId / _search

, потому что я не хочу хранить строки в виде массива, присоединенного к одной записи транзакции, но я не уверен, является ли это хорошей практикой для создания нового типа в начале каждой транзакции. Я даже не уверен, возможно ли это.

Можете ли вы дать советы по хранению этих данных транзакций наasticsearch?

1 Ответ

1 голос
/ 17 января 2020

, если вы хотите сделать запрос с URI, таким как /transactions/transactionId/_search, это означает, что вы планируете создавать несколько типов каждый раз, когда приходит новый идентификатор транзакции. Теперь, за исключением того, что это плохой дизайн, даже невозможно иметь более одного типа в индексе (после версии 5.XI) и типы были полностью удалены с версии 7.X. Одним из решений является использование самого идентификатора транзакции в качестве идентификатора документа при создании. Затем вы можете получить журнал, связанный с одним ID транзакции, выполнив запрос GET transactions/transactionId (хотя читайте об ограничениях длины идентификатора документа), но это может вызвать другую проблему, заключающуюся в том, что для одной транзакции может быть несколько журналов, поэтому каждый журнал запись с таким же идентификатором просто перезапишет предыдущую запись. Наилучшим решением здесь будет изменение способа запроса этих записей.

Для этого вы можете указать в качестве одного из полей в тексте json TransactionId вместе с, возможно, созданной отметкой времени во время вставки. (пусть ES создает документы с автоматически сгенерированным идентификатором), а затем запрашивает все журналы, связанные с транзакцией, например:

POST transactions/_search
{
   "sort": [
    {
      "createdDate": {
        "order": "asc"
      }
    }
  ],
   "query":{
    "bool":{
      "must":[
        {
          "term":{
            "transactionId.keyword":"<transaction id>"
          }
        }
        ]
    }
  }
}

Надеюсь, это поможет

...