type OaiDCItem struct {
Title string `xml:"title"`
Authors []string `xml:"creator"`
Keywords []string `xml:"subject"`
Abstract string `xml:"description"`
Language string `xml:"language"`
Date string `xml:"date"`
}
Jusque là tout va bien, je récupère bien un string comme date, soit "2018-01-01" soit "2018-02" soit "2018", ce sont les 3 formats que je sors du xml que je parse.
const publicationMapping = `
{
"settings":{
"number_of_shards": 1,
"number_of_replicas": 0
},
"mappings":{
"dates": {
"type" : "nested",
"properties": {
"key": { "type": "text" },
"date": {"type": "date", "format": "yyyy||yyyy-MM||yyyy-MM-dd" }
}
}
}
}`
J'ai un struct qui fait le lien avec ES :type PublicationDate struct {
key string `json:"key"`
date time.Time `json:"date"`
}
type Publication struct {
ID string `json:"id"`
Title string `json:"title"`
Type string `json:"type"`
Abstract string `json:"abstract"`
Source string `json:"source"`
Language string `json:"language"`
CreatedAt time.Time `json:"created_at"`
Authors []Author `json:"authors"`
Keywords []string `json:"keywords"`
Identifiers []string `json:"identifiers"`
Dates []PublicationDate `json:"dates"`
}
Ma problématique, c'est donc de réussir à passer du struct de parsing xml à un struct qui est envoyé dans ES. if len(item.Date) > 0 {
fmt.Println("Date : "+item.Date)
addPublicationDate(&pub, item.Date)
}
La Fonction addPublicationDate c'est ça : func addPublicationDate(p *Publication, date string) {
parts := strings.Split(date, "-")
pubDate := PublicationDate{}
pubDate.key = PublicationDateType
if len(parts) == 3 {
pubDate.date, _ = time.Parse("2006-01-02", date)
} else if len(parts) == 2 {
pubDate.date, _ = time.Parse("2006-01", date)
} else if len(parts) == 1 {
pubDate.date, _ = time.Parse("2006", date)
} else {
return
}
var pubDates []PublicationDate
pubDates = append(pubDates, pubDate)
p.Dates = pubDates
}
En gros c'est donc dans ce dernier code que je dois avoir un problème. J'arrive à faire de l'enregistrement de struct de struct dans ES, pour les auteurs par exemple, mais pour les dates, donc je dois bien merder à ce niveau là.yaugJe suis en train de développer un crawler de publications scientifiques en go pour enregistrer tout ça dans un Elasticsearch.Je ne peux pas t'aider vu que je connais pas du tout Go (mais je vais lurker les infos ici ). Par contre, quelle était la motivation d'utiliser spécifiquement ce langage pour ce use-case ? C'est pas du tout du troll hein, mais de la curiosité : si je devais me mettre à Go, ce serait pour "quels cas" en particulier (sachant que je maîtrise Python) ?
yaugCela doit venir du formatage des dates dans Go je pense.Oui et non, mais tu vas pleurer si je te montre le problème
PublicationDate
, tes champs key
et date
ne sont pas exportés. En modifiant la struct ils apparaissent bien:type PublicationDate struct {
Key string `json:"key"`
Date time.Time `json:"date"`
}
Date : 2018
{"id":"","title":"","type":"","abstract":"","source":"","language":"","created_at":"0001-01-01T00:00:00Z","keywords":null,"identifiers":null,"dates":[{"key":"lol","date":"2018-01-01T00:00:00Z"}]}
Par contre la logique n'est pas claire pour moi. Comme tu vois le marshaller sérialise le time dans un format "ISO", ce qui est relativement prévisible. Mais visiblement ton mapping ES s'attend à devoir indexer une date dans un des trois formats que tu as donné, je pense donc que ça va coincer car la transformation de la date serait faite une fois en Go, puis une fois par ES.basic_date_time
dans ton index.PublicationDate.Date
en string
plutôt qu'en time.Time
et ne pas appliquer de transformation par rapport à ce que tu lis dans le XMLPublicationDate.Date
mais implémenter func (PublicationDate) MarshallJSON
pour effectuer la transformation inverse au moment du passage du serializer (3 transformations du coup).Guybrushpeu efficace genre Python "out-of-the-box" (ou pas du tout efficace genre php ?).Ce troll d'il y a dix ans vu que PHP défonce Python une main dans le dos en terme de perf
Ce message a été modifié 1 fois.
Dernière modification : 15 juillet 2018
à 13:13 par
Fabe.
FabeCe troll d'il y a dix ans vu que PHP défonce Python une main dans le dos en terme de perfOuais mais ils comparent PHP avec Zen >= 3, mais ne disent rien sur l'interpréteur Python utilisé (je suppose du "bête" CPython). Pour ne pas fausser la comparaison, la comparaison aurait du être effectuée avec PyPy (qui, en moyenne, s'avère 7 fois plus rapide que Python, mais qui malheureusement ne supporte pas encore pleinement les extensions écrites dans d'autres langages (comme C par exemple), même si ça commence à être largement suffisant pour les bibliothèques scientifiques usuelles).
Ce message a été modifié 2 fois.
Dernière modification : 15 juillet 2018
à 13:48 par
Guybrush.
1996-2024 — Lexpage v4 — GPLv3 (sources)
page générée le 23 décembre 2024 à 15:21:57