web-dev-qa-db-fra.com

Comment faire en sorte qu'elasticsearch ajoute le champ d'horodatage à chaque document dans tous les index?

Experts Elasticsearch,

J'ai été incapable de trouver un moyen simple de simplement dire à ElasticSearch d'insérer le champ _timestamp pour tous les documents qui sont ajoutés dans tous les index (et tous les types de documents).

Je vois un exemple pour des types spécifiques: http://www.elasticsearch.org/guide/reference/mapping/timestamp-field/

et voir également un exemple pour tous les indices pour un type spécifique (en utilisant _all): http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/

mais je ne trouve aucune documentation sur son ajout par défaut pour tous les documents qui sont ajoutés quels que soient l'index et le type.

33
Gautam M

Vous pouvez le faire en le fournissant lors de la création de votre index.

$curl -XPOST localhost:9200/test -d '{
"settings" : {
    "number_of_shards" : 1
},
"mappings" : {
    "_default_":{
        "_timestamp" : {
            "enabled" : true,
            "store" : true
        }
    }
  }
}'

Cela créera alors automatiquement un _ timestamp pour toutes les choses que vous mettez dans l'index. Ensuite, après avoir indexé quelque chose lors de la demande du champ _timestamp, il sera renvoyé.

33
Marcus Granström

Elasticsearch supportait l'ajout automatique d'horodatages aux documents indexés, mais déconseillé cette fonctionnalité dans 2.0.0

Depuis la version 5.5 documentation :

Les champs _timestamp et _ttl étaient obsolètes et sont maintenant supprimés. En remplacement de _timestamp, , vous devez remplir un champ de date normal avec l'horodatage actuel du côté application .

36
FluxLemur

Ajout d'une autre façon d'obtenir l'horodatage d'indexation. J'espère que cela peut aider quelqu'un.

Le pipeline d'ingestion peut être utilisé pour ajouter un horodatage lorsque le document est indexé. Voici un exemple:

PUT _ingest/pipeline/indexed_at
{
  "description": "Adds indexed_at timestamp to documents",
  "processors": [
    {
      "set": {
        "field": "_source.indexed_at",
        "value": "{{_ingest.timestamp}}"
      }
    }
  ]
}

Auparavant, la recherche élastique utilisait des pipelines nommés en raison du paramètre "pipeline" qui devait être spécifié dans le point de terminaison de recherche élastique utilisé pour écrire/indexer des documents. (Ref: link ) C'était un peu gênant car vous auriez besoin de modifier les points de terminaison côté application.

Avec la version de recherche élastique> = 6.5, vous pouvez désormais spécifier un pipeline par défaut pour un index à l'aide de index.default_pipeline paramètres. (Voir lien pour plus de détails)

Voici le pour définir le pipeline par défaut:

PUT ms-test/_settings
{
  "index.default_pipeline": "indexed_at"
}

Je n'ai pas encore essayé, car je n'ai pas mis à niveau vers ES 6.5, mais la commande ci-dessus devrait fonctionner.

3
manoj

créez d'abord l'index et les propriétés de l'index, telles que le champ et le type de données, puis insérez les données à l'aide de l'API rest.

ci-dessous est la façon de créer un index avec le champ properties.execute ce qui suit dans la console kibana

`PUT /vfq-jenkins
{
"mappings": {
"properties": {
"BUILD_NUMBER": { "type" : "double"},
"BUILD_ID" : { "type" : "double" },
"JOB_NAME" : { "type" : "text" },
"JOB_STATUS" : { "type" : "keyword" },
"time" : { "type" : "date" }
 }}}`    

l'étape suivante consiste à insérer les données dans cet index: curl -u élastique: changeme -X POST http: // elasticsearch: 9200/vfq-jenkins/_doc /? pretty -H Content-Type: application/json -d '{"BUILD_NUMBER": "83", "BUILD_ID": "83", "JOB_NAME": "OMS_LOG_ANA", "JOB_STATUS": "SUCCESS", "time" ":" 2019-09-08'T'12: 39: 00 "} '

0
Navaganesh R