Je voudrais renvoyer l’enregistrement le plus récent (top 1) de l’index ElasticSearch similaire à la requête SQL ci-dessous;
SELECT TOP 1 Id, name, title
FROM MyTable
ORDER BY Date DESC;
Cela peut-il être fait?
Avez-vous _timestamp activé dans votre mapping de doc?
{
"doctype": {
"_timestamp": {
"enabled": "true",
"store": "yes"
},
"properties": {
...
}
}
}
Vous pouvez vérifier votre cartographie ici:
http://localhost:9200/_all/_mapping
Si tel est le cas, je pense que cela pourrait fonctionner pour obtenir le plus récent:
{
"query": {
"match_all": {}
},
"size": 1,
"sort": [
{
"_timestamp": {
"order": "desc"
}
}
]
}
Pour information, _timestamp est maintenant déconseillé depuis la version 2.0.0-beta2 . Utilisez date
dans votre correspondance.
Un simple mappage de date JSON de date
datatype doc:
{
"mappings": {
"my_type": {
"properties": {
"date": {
"type": "date"
}
}
}
}
}
Vous pouvez également ajouter un champ format
dans date
:
{
"mappings": {
"my_type": {
"properties": {
"date": {
"type": "date",
"format": "yyy-MM-dd HH:mm:ss||yyyy-MM-dd||Epoch_millis"
}
}
}
}
}
Vous pouvez utiliser sort le champ de date et taille = 1 paramètre .
Obtenir le dernier identifiant en utilisant la date (avec l'horodatage)
Exemple d'URL: http: // localhost: 9200/deal/dealsdetails/
Méthode: POST
Requête:
{
"fields": ["_id"],
"sort": [{
"created_date": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"size": 1
}
résultat:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 9,
"max_score": null,
"hits": [{
"_index": "deal",
"_type": "dealsdetails",
"_id": "10",
"_score": 1,
"sort": [
1478266145174,
1
]
}]
}
}
Si vous utilisez le module python elasticsearch5 ou curl:
de python vous faites
es = elasticsearch5.Elasticsearch('my_Host:my_port')
es.search(
index='my_index',
size=1,
sort='my_timestamp:desc'
)
Si vos documents ne sont insérés avec aucun champ de type datetime, alors je ne pense pas que vous puissiez obtenir le N "le plus récent".
l'horodatage n'a pas fonctionné pour moi,
cette requête fonctionne pour moi:
(comme dans la réponse de mconlin)
{
"query": {
"match_all": {}
},
"size": "1",
"sort": [
{
"@timestamp": {
"order": "desc"
}
}
]
}
Cela pourrait être trivial mais la réponse de _timestamp n’a pas donné une erreur, mais pas un bon résultat non plus ...
J'espère aider quelqu'un ...
(kibana/élastique 5.0.4)
S.