web-dev-qa-db-ja.com

kibanaでfielddata = trueを設定する方法

Kibanaを初めて使用し、Elastic 5.0.0-alpha3にデータをロードし、Kibana 5.0.0-alpha3を使用して視覚化します。いくつかの数値フィールドをヒストグラムとして表示できますが、テキストフィールドを使用したい場合は次のようになります。

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.

データ(出版社の名前)はサブフィールドに分析された可能性があると警告されていますが、とにかく表示したいと思います。

fielddata=trueを設定するにはどうすればよいですか?

編集:Kibana githubの最近の問題は、これが5.0.0の新機能であり、まだ回答を待っていることを示唆しています!

編集(@Valの回答に従い、Elastic初心者の助けを求め、他の人がそれが役立つことを望んでいます)。取り込みスクリプトは次のとおりです。

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

これに@Valのアプローチを含めるにはどうすればよいですか?

35

ESマッピングでは、publisherフィールドに fielddata:true を設定する必要があります。

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

この変更を行った後、データのインデックスを再作成する必要がありますが、その後、Kibanaはもう文句を言いません。

UPDATE

Sense UI またはcurlを介して上記のクエリを実行できます

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

または、ドキュメントを作成する直前にJavascriptファイルで実行することもできます。

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

Elastic 5.xを使用しているため(これを書いている時点で5.2はリリースされています)、代わりに、インデックス付きフィールドでfielddataを有効にする代わりに、新しいキーワードサポートを使用する必要があります。

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/fielddata.html は、長所と短所、およびこれを設定する方法に関する適切な情報を提供します。ページから:

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

次に、検索に「my_field」フィールドを使用し、集計、ソート、またはスクリプトで「my_field.keyword」フィールドを使用します。

my_field.keywordは、Kibana/Grafana内で使用するものです。

20
Patrick B

このコードはこの問題を修正します。

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

したがって、このコードはその後実行されます。

GET /megacorp/employee/_search
    {
      "aggs": {
        "all_interests": {
          "terms": { "field": "interests"}
        }
      }
    }
6
Kris Holt

既存のテキストフィールドでフィールドデータを有効にします。これは、このフィールドで集計を行うために必要です

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