2016-05-30 3 views
0

10億レコードのインデックスを作成したいと考えています。各レコードには2つの属性(attribute1とattribute2)があります。 attribute1に同じ値を持つ各レコードは、マージする必要があります。例えば、私は2つの記録ElasticSearchでのインデックス作成後の検索

attribute1 attribute2 
1 4 
1 6 

私弾性文書がデータの膨大な量に

{ 
    "attribute1": "1" 
    "attribute2": "4,6" 
} 

でなければならない、私はバルク(約1000レコード)を読み、に基づいて、それらをマージする必要がありますがありますElasticSearchでそれらを検索し、検索結果とマージして索引付け/再索引付けします。 要約すると、私は一括して検索とインデックスを作成する必要があります。 私はこのルールを実装しましたが、Elasticはすべての結果を返しておらず、一部の文書は重複して索引付けされています。 各インデックスI ElasticSearchをリフレッシュした後、次の検索の準備が整うようにします。場合によっては動作しません。

{ 
"test_index": { 
    "settings": { 
     "index": { 
      "refresh_interval": "-1", 
      "translog": { 
       "flush_threshold_size": "1g" 
      }, 
      "max_result_window": "1000000", 
      "creation_date": "1464577964635", 
      "store": { 
       "throttle": { 
        "type": "merge" 
       } 
      } 
     }, 
     "number_of_replicas": "0", 
     "uuid": "TZOse2tLRqGk-vHRMGc2GQ", 
     "version": { 
      "created": "2030199" 
     }, 
     "warmer": { 
      "enabled": "false" 
     }, 
     "indices": { 
      "memory": { 
       "index_buffer_size": "40%" 
      } 
     }, 
     "number_of_shards": "5", 
     "merge": { 
      "policy": { 
       "max_merge_size": "2g" 
      } 
     } 
    } 
} 

どのように私はこの問題を解決することができます 私のインデックスの設定は、次のように続いていますか?

この状況を処理する他の設定はありますか?一括コマンドで

答えて

0

、あなたのattribute2プロパティを更新するためのスクリプトで最初に検出されたためindex操作を使用して、updateする必要があります。

{ "index" : { "_index" : "test_index", "_type" : "test_type", "_id" : "1" } } 
{ "attribute1" : "1", "attribute2": [4] } 
{ "update" : { "_index" : "test_index", "_type" : "test_type", "_id" : "1" } } 
{ "script" : { "inline": "ctx._source.attribute2 += attr2", "params" : {"attr2" : 6}}} 

最初index操作した後、あなたの文書が

のようになります。
{ 
    "attribute1": "1" 
    "attribute2": [4] 
} 

update操作した後、あなたの文書が

のようになります。
{ 
    "attribute1": "1" 
    "attribute2": [4, 6] 
} 

操作はdoc_as_upsertscriptでのみ使用できます。

+0

私の質問はなぜデータをインデックス化して弾性をリフレッシュし、すぐにそれを検索すると弾性が結果を返さないのですか? – Ghasem

+0

インデックスを更新するにはどうすればよいですか?あなたの 'refresh_interval'設定が-1であることがわかります。これは決してリフレッシュしないことを意味します。バルクインデックス作成後の – Val

+0

私はAPIでリフレッシュを呼び出します。 – Ghasem

関連する問題