2016-08-09 5 views
1

TLDR:マッピングでnot_analyzedと指定されていても、一部のフィールドは分析されます。マッピングでnot_analyzedは無視されます

私はいくつかのデータセットを持っており、それぞれがセットに含まれる日付に基づいてElasticsearchインデックスに送られます(index-25012016のようなインデックス名を与えます)。一部のセットは同じ日付で、したがって同じインデックスを持ちます。

私はES

$ currentIndexNameと$マッピングは、それぞれいくつかのより多くので index-25012016

{ 
    "mappings": { 
     "myMappingType": { 
      "properties": { 
       "present": { 
        "type":"boolean" 
       }, 
       "records": { 
        "type":"integer" 
       }, 
       "batchID": { 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "version": { 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "date": { 
        "type":"date", 
        "format":"yyyy-MM-dd" 
       }, 
       "packageCreationDate": { 
        "type":"date", 
        "format":"MM/dd/yyyy-HH:mm" 
       } 
      } 
     } 
    } 
} 

のように見える文字列である

print `curl -s -XPUT "http://$ELASTIC_SEARCH_URL/$currentIndexName?pretty" -d ' $mapping'`

へのマッピングを送信するには、次のperlコマンドを使用

フィールド。 このコマンドはすべてのセットに対して繰り返されますが、これまでに行った$ currentIndexNameを除きます。コマンドが実行されると 、ESからの答えは、私はその後、$ OUTPUTFILENAMEは、JSONファイルの名前です`curl -s -XPOST "$ELASTIC_SEARCH_URL/$currentIndexName/_bulk?pretty" --data-binary \@$outputFileName`; とESにデータを送信し、このマッピングステップはスキップされたり達成されたかどうかを

{ 
    "acknowledged" : true 
} 

です。

問題は、私がnot_analyzedをKibana/Settings/Indicesで指定しても、文字列フィールドが分​​析とインデックス化の両方にマークされていることです。したがって、たとえば、バージョンフィールドがすべて( "3.2.506 64ビット")で同じであるため、円グラフにはaの代わりに "3.2.506"、 "64"および "bit"の3つの等しいスライスが表示されますすべてのスライスされていない "3.2.506 64ビット"パイ。ただし、ブール値、数値、日付フィールド、およびメタフィールドは分析されません。

木場のインデックスパターンはすべてのインデックス(index- *)と一致し、日付を時間ベースのイベントフィールドとして使用します。 データの送信後にインデックスパターンを再作成しようとしましたが、何も変更されません。 私はWindows 7を使用しており、logstashは使用しません。

EDIT:

Remove data 
for each set in allSets 
    mapping (if not already mapped in a previous iteration) 
    send data to ES 

答えて

1

マッピング:私は、現時点では多くのテストを行うので、スクリプトが起動するたびに、私は print `curl -s -XDELETE "http://localhost:9200/index-*?pretty`; でセットを反復処理する前にデータを削除するためのスクリプトは次のように見えます既存のデータを更新することはできません。正しいマッピングで新しい索引を作成し、その索引に文書を再索引付けする必要があります。ここではESのドキュメントへのリンクは次のとおりです。https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html#_updating_existing_mappings

また、自動的に新しく作成されたインデックスにマッピングを適用するインデックス・テンプレートを使用することができます。https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html

+0

はありがとう、私は重要な何かを書くのを忘れを思い出し:私は実際にデータを削除します私がプロセスを始める前に(編集された答えを見てください)。したがって、マッピング・ステップでは索引が作成されないため、データを送信しません。 – LogicalKip

+0

スクリプトは完了した後、http:// localhost:9200/your-index-name?pretty = trueにGET要求を実行すると、ESはインデックスに対して正しいマッピングを返しますか?もしそうなら、私はインデックスパターンのために木場のフィールドリストをリフレッシュしようとします。これがうまくいかない場合は、Kibanaインデックスパターンと一致する古いマッピングが存在する古いインデックスがまだ存在する可能性があります。とにかく、私が指摘した索引テンプレートを見てください。索引作成時に正しいマッピングが適用され、自分でマッピングを変更する必要がないからです。 – const314

+0

なぜそれが以前にはうまくいかなかったのかまだ分かりませんが、自動インデックステンプレートを使用することはやりました。ありがとうございました。 – LogicalKip

関連する問題