У меня есть данные с полями записей, версий, заголовков и истечений. Запись - это не уникальное поле, и каждая запись может иметь несколько версий.Ограничение результатов по нескольким атрибутам
В результатах поиска мне нужно показать только одну из каждой версии.
Таким образом, можно искать по заголовкам статей, которые находятся на/до определенной даты, но возвращают только один результат для каждой версии.
Например, учитывая эти данные:
{"record": 1, "version": 1, "title": "Hello", "expires": "2011-08-17 00:00:00"},
{"record": 1, "version": 2, "title": "Hello", "expires": "2012-08-17 00:00:00"},
{"record": 2, "version": 1, "title": "Hello world", "expires": "2010-08-17 00:00:00"},
{"record": 2, "version": 2, "title": "Hello world", "expires": "2011-08-17 00:00:00"},
{"record": 2, "version": 3, "title": "Hello world", "expires": "2012-08-17 00:00:00"},
поиска документов, содержащих "Hello" в названии, что истек/Перед 2012-08-18 должен вернуться:
{"record": 1, "version": 2, "title": "Hello", "expires": "2012-08-17 00:00:00"},
{"record": 2, "version": 3, "title": "Hello world", "expires": "2012-08-17 00:00:00"}
(самая последняя «версия» каждой записи).
Любые идеи?
Должен ли я перебирать результаты за пределами ES? Спасибо за чтение!
Вы считали, что вложенные версии данных являются под-объектами в индексированном документе? Таким образом, в вашем индексе всегда будет только «запись 1», но она будет содержать поле «версий», которое поддерживает упорядоченный список с полем «version_num». Я думаю, вы могли бы использовать какой-то скрипт, чтобы получить только последний элемент на этом этапе ... может быть? –
Я не думаю, что то, что вы просите, напрямую возможно. Кроме того, @James, es может не только возвращать «соответствующие» части вложенного документа, весь документ возвращается, если он является хитом. – ramseykhalaf
Извините @JamesAddison Я неправильно прочитал ваш комментарий (под-объекты превратились в вложенные документы). Да, я думаю, это сработает. В противном случае вы можете иметь логический «последний» флаг и фильтровать его. Решение заключается в том, следует ли выполнять дополнительную работу в индексном времени или во время поиска. – ramseykhalaf