2017-02-02 4 views
1

NESTを使用してElasticSearchデータベースを読み書きするC#アプリケーションがあります。私はタイプの文書を保管していますDictionary<string, object>ElasticSearchインデックスマッピングとワイルドカード

インデックスの作成直後にマッピングを設定しています。

 elastic.Map<Dictionary<string, object>>(m => m 
      .Index(indexName) 
       .Type("DataRecord") 
      .AutoMap().AllField(a => a.Enabled(false)) 
      .Dynamic() 
      .DynamicTemplates(dt => dt 
       .DynamicTemplate("pv_values_template", t => t 
        .Match("ch_*") 
        .Mapping(m2 => m2 
         .Number(n => n 
          .Store(false) 
          .DocValues()))))); 

を呼び出しはもちろん、私のインデックスの名前ですindexNameを受け付けます。私は、以下を参照してください、NESTの呼び出しを経由して、それをやっています。私は別のインデックスのドキュメントを格納、このプロジェクトでは、

今これは(タイプはobjectあるとして事前に行うことはできません)Dictionary<string, object>文書に固有のマッピングを設定するElasticSearchを伝えるためにやってるように:

acme_company_2017 
acme_company_2016 
acme_company_2015 
and so on... 

毎年新しいインデックスが作成され、マッピングが設定され、毎回保存されたものがうまくいきます。

その後、問題は文書を読み戻すに発生する:

私はある特別なインデックス使用していた文書読み返すとき:

acme_company_* 

に私はすべてのためにすべてのものを取得することができますこの方法を年間を事前に知らなくても、データベースに格納されているすべてのデータを取得するだけです。以下を参照してください:

私がこれを行っているとき、ElasticSearchエンジンは、選択したインデックスにマッピングがないと不平を言っています。私はacme_company_*acme_company_2017の同じ文字列ではないことを知っていますが、それは同じではありませんマッピングの賢さ?

のマッピングが

DateTimeにソートするために、[日時]が見つかりませんDictionary<string, object>文書上のキーです:

これは私が得る実際の誤差があります。私が文書を読み返すと、全く同じインデックス(例:acme_company_2015のようなもの)を提供しても、すべて正常に動作します。

インデックスを1年から終わりまで繰り返す(結果をまとめて結合する)システムはスケーラブルでなければならないため、オプションではありません。また、インデックスは月かのように、短い時間に及ぶことがさらに少ないことがacme_company_*を使用しているとき、私は、私はしませんでしたインデックスのも、別のセットに一致していることが判明した

答えて

2

私はここで自分自身にお答えします、マッピングを持たない言及(すなわち、acme_company_metadata)。

解決策は、acme_company_<year>インデックス(acme_company_metadataを除く)のみと一致させることです。それは年だけ一致するように正規表現を締め付けることができます

+1

あなたが答えを見つけてうれしいです:) –

関連する問題