ElasticSearch получить список из 10 (самых последних) элементов в типе / индексе

У меня есть индекс с именем publishing_items и тип, называемый «публикация».

Я хотел бы иметь 10 самых последних добавленных публикаций. (какой-то принцип совпадения)

Я использую ElasticSearch PHP (http://www.elasticsearch.org/guide/en/elasticsearch/client/php-api/current/_quickstart.html)

По сути, я просто делаю get по умолчанию, но я не знаю, как это сделать в ElasticSearchPHP.

В смысле.qbox.io я делаю:

POST /publications_items/_search {    "query": {
"match_all": {}    } }

и работает нормально

отображение:

PUT /publications_items/ {    "mappings": {
"publication": {
"properties": {
"title": {
"type": "string"},
"url": {
"type": "string"},
"description": {
"type": "string"},
"year": {
"type": "integer"},
"author": {
"type": "string"}
}
}    } }

2

Решение

Тебе нужно включить отображение «_timestamp»:

PUT /test/doc/_mapping
{
"_timestamp": {
"enabled": "true",
"store": "true"}
}

И в вашем поисковом запросе вам нужно сортировать по нему и получить первые 10 документов:

GET /test/_search
{
"sort" : {
"_timestamp" : { "order" : "desc" }
},
"from" : 0, "size" : 10
}

И особенно в Elasticsearch PHP:

  • изменения отображений:
require 'vendor/autoload.php';

$client = new Elasticsearch\Client();
$params = array();

$params2 = [
'_timestamp' => [
'enabled' => 'true',
'store' => 'true'
]
];
$params['index']='test';
$params['type']='doc';
$params['body']['doc']=$params2;
$client->indices()->putMapping($params);
  • запрос:
require 'vendor/autoload.php';

$client = new Elasticsearch\Client();

$json = '{
"sort" : {
"_timestamp" : { "order" : "desc" }
},
"from" : 0, "size" : 10
}';

$params['index'] = 'test';
$params['type']  = 'doc';
$params['body'] = $json;

$results = $client->search($params);
echo json_encode($results, JSON_PRETTY_PRINT);
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]