2017-01-17 5 views
3

しかし、この「Fielddataはデフォルトでテキストフィールドで無効になっています。」という理由で、私のデータの一部は新しい弾性検索では機能しません。2.xより前に有効になっていたようです。私はelasticsearch 2.xから5.1に更新したという問題があります。デフォルトでは、elasticsearchのテキストフィールドでフィールドデータが無効にされています。

テキストフィールドにフィールドデータを自動的に有効にする方法はありますか?

私はこの

curl -XPUT http://localhost:9200/_template/template_1 -d ' 
{ 
    "template": "*", 
    "mappings": { 
    "_default_": { 
     "properties": { 
     "fielddata-*": { 
      "type": "text", 
      "fielddata": true 
     } 
     } 
    } 
    } 
}' 

のようなコードを試してみましたが、elasticsearchは、フィールド名でそこにワイルドカードを理解していないように見えます。これを一時的に解決するには、30分ごとにpythonスクリプトを実行して、すべてのインデックスをスキャンし、新しいフィールドにfielddata = trueを追加しています。

問題は、elasticsearchに「これはクール」のような文字列データがあることです。

それを集約しようとしたとき
curl -XPUT 'http://localhost:9200/example/exampleworking/1' -d ' 
{ 
    "myfield": "this is cool" 
}' 

: "Fielddataはデフォルトでテキストフィールドで無効になっている[myFieldで]に真= fielddataを設定する"

curl 'http://localhost:9200/example/_search?pretty=true' -d ' 
{ 
    "aggs": { 
     "foobar": { 
      "terms": { 
       "field": "myfield" 
      } 
     } 
    } 
}' 

ドキュメントをelasticsearch .keywordを使用することをお勧めフィールドデータを追加する代わりにしかし、それは私が望むデータを返すわけではありません。

curl 'http://localhost:9200/example/_search?pretty=true' -d ' 
{ 
    "aggs": { 
     "foobar": { 
      "terms": { 
       "field": "myfield.keyword" 
      } 
     } 
    } 
}' 

戻り値:

"buckets" : [ 
    { 
     "key" : "this is cool", 
     "doc_count" : 1 
    } 
    ] 

正しくありません。それから私はfielddata真追加し、すべてが動作します:

curl -XPUT 'http://localhost:9200/example/_mapping/exampleworking' -d ' 
{ 
    "properties": { 
     "myfield": { 
      "type": "text", 
      "fielddata": true 
     } 
    } 
}' 

、その後集計

curl 'http://localhost:9200/example/_search?pretty=true' -d ' 
{ 
    "aggs": { 
     "foobar": { 
      "terms": { 
       "field": "myfield" 
      } 
     } 
    } 
}' 

リターン正しい結果を、私はすべてにすべてのインデックスに自動的に=真このfielddataを追加することができますどのように

"buckets" : [ 
    { 
     "key" : "cool", 
     "doc_count" : 1 
    }, 
    { 
     "key" : "is", 
     "doc_count" : 1 
    }, 
    { 
     "key" : "this", 
     "doc_count" : 1 
    } 
    ] 

テキストフィールド?それも可能ですか? elasticsearch 2.xでは、これは箱の中で動いています。

+0

私は自分自身に答えます – Zetab

答えて

2

iは

curl -XPUT http:/localhost:9200/_template/template_1 -d ' 
{ 
    "template": "*", 
    "mappings": { 
    "_default_": { 
     "dynamic_templates": [ 
     { 
      "strings2": { 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "text", 
       "fielddata": true 
      } 
      } 
     } 
     ] 
    } 
    } 
}' 

これは私が望むものをやっている自分自身にお答えします。現在、すべてのインデックスにデフォルト設定のフィールドデータがあります

+0

こんにちは、私も問題に会いました。私はあなたのテンプレートを適用し、再インデックスを行うが、まだテキストを集約することによってテーブルを描画するキバナからエラーを得た。正しいステップはありますか?テンプレートの作成 - >既存のインデックスの再インデックスとすべてのテキストフィールドには "fielddata = true"がありますか? – CSJ

関連する問題