2016-07-01 25 views
19

Sono nuovo di Kibana, ho caricato i dati in Elastic 5.0.0-alpha3 e sto usando Kibana 5.0.0-alpha3 per visualizzare. Posso visualizzare alcuni campi numerici come istogrammi, ma quando voglio utilizzare i campi di testo ottengo:come impostare fielddata = true in kibana

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. 

sto avvertito che i dati (nomi degli editori) possono essere state analizzate in sottocampi, ma mi piacerebbe mostra comunque.

Come impostare fielddata=true?

MODIFICA: i recenti problemi sul github di Kibana suggeriscono che questa è una nuova funzionalità in 5.0.0 ed è ancora in attesa di una risposta!

MODIFICA (seguendo la risposta di @ Val e chiedendo aiuto per i principianti elastici e sperando che gli altri lo trovino utile). Lo script di ingest era:

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] 
      }) 
     } 
    }); 

Come posso includere l'approccio di @ Val in questo?

risposta

26

Nella tua mappatura ES, è necessario impostare fielddata:true nel vostro publisher campo:

PUT your_index/_mapping/your_type 
{ 
    "your_type": { 
     "properties": { 
     "publisher": { 
      "type": "text", 
      "fielddata": true 
     } 
     } 
    } 
} 

Avrai bisogno di reindicizzare i dati dopo aver fatto questo cambiamento, ma in seguito Kibana non si lamenterà più.

UPDATE

È possibile eseguire la query sopra nella Sense UI o tramite ricciolo

curl -XPUT http://localhost:9200/index -d '{ 
    "mappings": { 
    "type": { 
     "properties": { 
     "publisher": { 
      "type": "text", 
      "fielddata": true 
     } 
     } 
    } 
    } 
}' 

Oppure si può anche eseguire nel file JavaScript appena prima di creare il documento:

client.indices.create({ 
    index: 'index', 
    body: { 
     "mappings": { 
     "type": { 
      "properties": { 
      "publisher": { 
       "type": "text", 
       "fielddata": true 
      } 
      } 
     } 
     } 
    } 
}); 
+0

hanno accettato/upvoted. Come novellino elastico mi piacerebbe sapere come/dove metterlo.Vedi l'ultimo EDIT in questione –

+0

testerà questo e spero dia l'OK. –

+0

Il secondo blocco del codice sorgente contiene un JSON non valido, non è un esempio funzionante. – TonyQ

10

Dato che si utilizza Elastic 5.x (5.2 è fuori ora mentre scrivo questo), si dovrebbe installare d utilizzare il nuovo supporto per parole chiave invece di abilitare i dati del campo in un campo indicizzato.

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/fielddata.html fornisce buone informazioni sui pro e contro e su come impostarlo. Dalla pagina:

PUT my_index 
{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "my_field": { 
      "type": "text", 
      "fields": { 
      "keyword": { 
       "type": "keyword" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

È quindi utilizzare il campo 'my_field' per le ricerche e il campo 'my_field.keyword' per le aggregazioni, l'ordinamento, o negli script.

my_field.keyword è ciò che usereste all'interno di Kibana/Grafana.

5

Questo codice risolve questo problema.

PUT megacorp/_mapping/employee 
{ 
    "employee": { 
     "properties": { 
     "interests": { 
      "type": "text", 
      "fielddata": true 
     } 
     } 
    } 
} 

Quindi questo codice verrà eseguito in seguito:

GET /megacorp/employee/_search 
    { 
     "aggs": { 
     "all_interests": { 
      "terms": { "field": "interests"} 
     } 
     } 
    } 
0

Abilita fielddata su un campo di testo esistente, questo è tenuto a fare aggregazione su questo campo

PUT megacorp/_mapping/employee 
{ 
    "properties": { 
    "interests": { 
     "type":  "text", 
     "fielddata": true 
    } 
    } 
} 
Problemi correlati