Подтвердить что ты не робот

Можем ли мы получить предыдущие документы-источники с вариантами эластичного поиска

Я прочитал сообщение в блоге о ES относительно versioning.

Однако, я хотел бы иметь возможность получить предыдущие документы "_souce" из обновления.

Например, допустим, у меня есть этот объект:

{
    "name": "John",
    "age": 32,
    "job": "janitorial technician"
}
// this becomes version 1

И я обновляю его до:

{
    "name": "John",
    "age": 32,
    "job": "president"
}
// this becomes version 2

Затем, путем управления версиями в ES, смогу ли я получить предыдущее свойство "job" объекта? Я пробовал это:

curl -XGET "localhost:9200/index/type/id?version=1"

но это возвращает только самый современный объект _source (тот, где Джон является президентом).

Я действительно хотел бы реализовать аспект разницы версий, как это делает StackOverflow. (Кстати, я использую метод упругого поиска в качестве основного db - если есть способ сделать это с другими базами данных nosql, я был бы рад попробовать его. Предпочтительно, тот, который хорошо интегрируется с ES.)

4b9b3361

Ответ 1

Нет, вы не можете сделать это, используя встроенное управление версиями. Все, что нужно сделать, это сохранить текущий номер версии, чтобы вы не могли использовать обновления.

Если вы хотите сохранить несколько версий, то вам придется реализовать это самостоятельно. В зависимости от того, сколько версий вы хотите сохранить, вы можете использовать три подхода:

Для небольших изменений объема:

1) хранить старые версии в одном документе

{ text: "foo bar",
  date:  "2011-11-01",
  previous: [
      { date: '2011-10-01', content: { text: 'Foo Bar' }},
      { date: '2011-09-01', content: { text: 'Foo-bar!' }},
  ]
}

Для больших изменений объема:

2) добавьте флаг current:

{
   doc_id:  123,
   version: 3,
   text:    "foo bar",
   date:    "2011-11-01",
   current: true
}

{
   doc_id:  123,
   version: 2,
   text:    "Foo Bar",
   date:    "2011-10-01",
   current: false
}

3) То же, что и (2) выше, но сохраните старые версии в отдельном индексе, поэтому сохраняйте свой "живой" индекс, который будет использоваться для большинства ваших запросов, небольших и более эффективных.