Indexation formats de dates en français

Bonjour,

Je recherche en vain depuis 2 jours comment indéxer un champ de type date mais formaté en français.

Je cherche à indéxer un champ comme une date à partir du format suivant : Mai 2017. Sauf que... non.

Voici la définition de mon mapping :

    "mappings": {
      "customer": {
        "properties": {
          ...
          "billingDueDate": {
            "type": "date",
            "locale": "FRENCH",
            "format": "mmmm YYYY"
          },
          ...
        }
      }
    }

Et voici l'erreur retournée à l'indexation :

{
  "error": {
    "root_cause": [
      {
        "type": "mapper_parsing_exception",
        "reason": "failed to parse [billingDueDate]"
      }
    ],
    "type": "mapper_parsing_exception",
    "reason": "failed to parse [billingDueDate]",
    "caused_by": {
      "type": "illegal_argument_exception",
      "reason": "Invalid format: \"septembre 2014\""
    }
  },
  "status": 400
} 

J'ai lu sur cette page de doc qu'il était possible de déclarer dans son mapping une date comme étant dans un format custom et en français mais pour le moment je m'y prend mal car ES me jette à chaque fois à l'indexation d'un document.

Existe-t-il une page de doc qui décrit le format attendu pour "locale" ? J'ai testé sans succès :

  • FRENCH
  • fr
  • fr_FR
  • french

Dans mes recherche je suis tombé sur une utilisation possible des processors mais cela m'a l'air improbable : https://www.elastic.co/guide/en/elasticsearch/reference/5.4/date-processor.html.

Avez-vous une suggestion / réponse sur la bonne façon de faire ?

Merci d'avance.

J'ai essayé de "jouer" avec ton cas. A noter que le "bon" format semble être MMM y en fait.

DELETE test
PUT test
{
  "mappings": {
    "doc": {
      "properties": {
        "date": {
          "type": "date",
          "format": "MMM y",
          "locale": "FRENCH"
        }
      }
    }
  }
}
PUT test/doc/1
{
  "date": "may 2017"
}

J'ai ouvert ce bug:

Egalement le même problème pour ingest... Du coup j'ai des doutes sur mon test...

Merci pour ta réponse.

Hmm, c'est intéressant, je viens de tester avec ta solution et j'ai toujours le même problème.

J'ai constaté une chose qui pourrait peut être être relatée. Dans mon mapping, j'ai d'autres champs date et lorsque j'indexe un document et consulte l'index par l'onglet Discover, Kibana m'indique que mes champs date sont... du texte. Normal ? Je ne crois pas.

Définition de l'index :

DELETE invoices
PUT invoices
{
    "mappings": {
      "customer": {
        "properties": {
          ...
          "billingDueDate": {
            "type": "date",
            "format": "MMM y",
            "locale": "FRENCH"
          },
          "expectedPaymentDate": {
            "type": "date",
            "format": "dd/MM/YYYY"
          },
          "orderNumber": {
            "type": "text"
          },
          "vat": {
            "type": "float"
          }
          ...
        }
      }
    }
}

Exemple de données :

POST invoices/customer
  {
    "invoiceNumber": "16/09/F0173",
    "businessUnit": null,
    "project": "Gestion des titres",
    "status": "Facture réglée",
    "billingDueDate": "septembre 2014",
    "orderNumber": "1603-006",
    "expectedPaymentDate": "02/09/2016",
    "vat": 360
  }

Y aurait-il une config particulière à faire sur les dates qui me manquerait ?

Merci !

La locale à utiliser est donc fr:

DELETE test
PUT test
{
  "mappings": {
    "doc": {
      "properties": {
        "date": {
          "type": "date",
          "format": "MMM y",
          "locale": "fr"
        }
      }
    }
  }
}
PUT test/doc/1
{
  "date": "mai 2017"
}

Fonctionne très bien.

Yes, ça a l'air de bien tourner, merci à toi !

Du coup je repose la question des types de champs. Dans Management / mon index / Liste des champs, le type des champs qui est censé être "date" est affiché comme "string". Une idée de ce qui pourrait expliquer ça ? Je dois ouvrir un autre topic ?

Il faut que tu fasses un refresh de l'index pattern depuis Kibana.
Pour que Kibana soit au courant du nouveau mapping

Génial, tout est OK.

Merci à toi !

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.