web-dev-qa-db-fra.com

comment définir fielddata = true dans kibana

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?

35
peter.murray.rust

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
            }
          }
        }
      }
    }
});
43
Val

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.

20
Patrick B

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"}
        }
      }
    }
6
Kris Holt

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
    }
  }
}
1
dpp.2325