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_*
を使用しているとき、私は、私はしませんでしたインデックスのも、別のセットに一致していることが判明した
あなたが答えを見つけてうれしいです:) –