Можем ли мы получить предыдущие _источники с помощью версий Elastic Search - PullRequest
44 голосов
/ 22 ноября 2011

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

Однако я хотел бы получить возможность получить предыдущие "_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.(Кстати, я использую эластичный поиск в качестве своей основной базы данных - если есть способ сделать это с другими базами данных nosql, я был бы счастлив попробовать его. Предпочтительно, тот, который хорошо интегрируется с ES.)

1 Ответ

64 голосов
/ 22 ноября 2011

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

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

Для небольших изменений громкости :

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) выше, но храните старые версии в отдельном индексе, поэтому ваш «живой» индекс, который будет использоваться для большинства ваших запросов, небольшой и более производительный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...