Je suis nouveau sur Kibana, j'ai des données chargées dans Elastic 5.0.0-alpha3 et j'utilise Kibana 5.0.0-alpha3 pour visualiser. Je peux afficher certains champs numériques sous forme d'histogrammes, mais lorsque je veux utiliser des champs de texte, je reçois:
Visualize: Fielddata is disabled on text fields by default. Set fielddata=true on [publisher] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.
Je suis averti que les données (noms d'éditeurs) ont peut-être été analysées en sous-champs, mais j'aimerais quand même les afficher.
Comment définir fielddata=true
?
EDIT: les derniers numéros sur Kibana github suggèrent qu’il s’agit d’une nouvelle fonctionnalité de la version 5.0.0 et qu’il attend toujours une réponse!
EDIT (suite à la réponse de @ Val, et demandant de l'aide pour les débutants d'Elastic et espérant que d'autres le trouveront utile). Le script d'ingestion était:
fs = require('fs')
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
Host: 'localhost:9200',
log: 'trace'
});
fs.readFile('/Users/pm286/workspace/cmdev/getpapers/20160602/crossref_results.json', (err, data) => {
if (err) throw err;
document = JSON.parse(data)
document = JSON.parse(data)
for(i=0;i<document.length;i++) {
client.create({
index: 'index',
type: 'type',
body: document[i]
})
}
});
Comment puis-je inclure l'approche de @ Val dans tout cela?
Dans votre mappage ES, vous devez définir fielddata:true
dans votre champ publisher
:
PUT your_index/_mapping/your_type
{
"your_type": {
"properties": {
"publisher": {
"type": "text",
"fielddata": true
}
}
}
}
Vous devrez réindexer vos données après avoir effectué ce changement, mais Kibana ne se plaindra plus.
[~ # ~] met à jour [~ # ~]
Vous pouvez exécuter la requête ci-dessus dans le Sense UI ou par curl
curl -XPUT http://localhost:9200/index -d '{
"mappings": {
"type": {
"properties": {
"publisher": {
"type": "text",
"fielddata": true
}
}
}
}
}'
Ou vous pouvez également l'exécuter dans votre fichier Javascript juste avant de créer votre document:
client.indices.create({
index: 'index',
body: {
"mappings": {
"type": {
"properties": {
"publisher": {
"type": "text",
"fielddata": true
}
}
}
}
}
});
Puisque vous utilisez Elastic 5.x (la version 5.2 est sortie au moment où j'écris ceci), vous devriez plutôt utiliser le nouveau support de mots-clés au lieu d'activer les données de champ sur un champ indexé.
https://www.elastic.co/guide/en/elasticsearch/reference/5.2/fielddata.html fournit de bonnes informations sur les avantages et les inconvénients et sur la manière de les définir. De la page:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"my_field": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
}
Vous utilisez ensuite le champ "my_field" pour les recherches et le champ "my_field.keyword" pour les agrégations, le tri ou les scripts.
my_field.keyword est ce que vous utiliseriez dans Kibana/Grafana.
Ce code corrige ce problème.
PUT megacorp/_mapping/employee
{
"employee": {
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}
}
Donc, ce code sera exécuté par la suite:
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests"}
}
}
}
Activer les données de champ sur un champ de texte existant, cela est nécessaire pour effectuer une agrégation sur ce champ
PUT megacorp/_mapping/employee
{
"properties": {
"interests": {
"type": "text",
"fielddata": true
}
}
}