Я пытаюсь запустить то, что стало выглядеть простым запросом на Elasticsearch, но я просто не могу получить результат, который я ищу.Запросить последний документ каждого типа на Elasticsearch
Вот краткий пример того, что я пытаюсь сделать:
У меня есть база данных новостей. Каждая новость содержит источник, заголовок, временную метку и пользователя.
Я хочу получить заголовок, основанный на отметке времени (timestamp based) для каждого доступного источника для данного пользователя.
#!/bin/bash
export ELASTICSEARCH_ENDPOINT="http://localhost:9200"
# Create indexes
curl -XPUT "$ELASTICSEARCH_ENDPOINT/news" -d '{
"mappings": {
"news": {
"properties": {
"source": { "type": "string", "index": "not_analyzed" },
"headline": { "type": "object" },
"timestamp": { "type": "date", "format": "date_hour_minute_second_millis" },
"user": { "type": "string", "index": "not_analyzed" }
}
}
}
}'
# Index documents
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "CNN", "headline": "Great news", "timestamp": "2015-07-28T00:07:29.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "CNN", "headline": "More great news", "timestamp": "2015-07-28T00:08:23.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "ESPN", "headline": "Sports news", "timestamp": "2015-07-28T00:09:32.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "John", "source": "ESPN", "headline": "More sports news", "timestamp": "2015-07-28T00:10:35.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "Mary", "source": "Yahoo", "headline": "More news", "timestamp": "2015-07-28T00:11:54.000"}
{"index":{"_index":"news","_type":"news"}}
{"user": "Mary", "source": "Yahoo", "headline": "Crazy news", "timestamp": "2015-07-28T00:12:31.000"}
'
Так как я могу получить последние CNN и последние заголовки ESPN от Джона, например?
Я изучал API многопользовательского поиска, но это означало бы, что мне нужно будет знать все источники заранее (в данном случае CNN и ESPN).
Thx так много! Это именно то, что я искал! Я понятия не имел, что вы можете использовать скопления для извлечения фактического источника, хотя это было просто для статистики. –
@Val У меня проблема, подобная предыдущей, но я хочу еще один уровень агрегации поверх того, что достигается здесь. Ждем вашего ответа. http://stackoverflow.com/questions/38195420/elasticsearch-aggregation-over-top-hits – SuperCoder
Можно ли агрегировать по нескольким полям таким же образом? –