Есть ли способ заставить Elasticsearch рассматривать последовательности-пробелы при группировке?Группировка последовательных документов с Elasticsearch
При условии, что следующие данные объемной импортирован в Elasticsearch:
{ "index": { "_index": "test", "_type": "groupingTest", "_id": "1" } }
{ "sequence": 1, "type": "A" }
{ "index": { "_index": "test", "_type": "groupingTest", "_id": "2" } }
{ "sequence": 2, "type": "A" }
{ "index": { "_index": "test", "_type": "groupingTest", "_id": "3" } }
{ "sequence": 3, "type": "B" }
{ "index": { "_index": "test", "_type": "groupingTest", "_id": "4" } }
{ "sequence": 4, "type": "A" }
{ "index": { "_index": "test", "_type": "groupingTest", "_id": "5" } }
{ "sequence": 5, "type": "A" }
Есть ли способ, чтобы запросить эту информацию таким образом, что
- документы с порядковым номером 1 и 2 идут к одной группе выходов,
- документ с порядковым номером 3 переходит на другой, а
- документы с порядковым номером 4 и 5 переходят в третью группу?
... учитывая тот факт, что последовательность типа А прервана элементом типа B (или любым другим элементом, который не является типом A)?
Я хотел бы результат ведра выглядеть примерно так (имя и значение sequence_group могут отличаться друг от друга - просто пытается проиллюстрированной логики):
"buckets": [
{
"key": "a",
"sequence_group": 1,
"doc_count": 2
},
{
"key": "b",
"sequence_group": 3,
"doc_count": 1
},
{
"key": "a",
"sequence_group": 4,
"doc_count": 2
}
]
Существует хорошее описание проблемы и некоторые SQL решение подходов - https://www.simple-talk.com/sql/t-sql-programming/the-sql-of-gaps-and-islands-in-sequences/. Я хотел бы знать, есть ли решение для поиска elasticsearch.
Агрегация Top hits, похоже, не решает проблему. Используя агрегацию, которую вы предложили, вы просто извлекаете два ведра: один для типа «А» и один для типа «В». Я не вижу, как это решает проблему рассмотрения разрывов последовательностей. – yaccob