2016-04-29 5 views
0

私はzzzというインデックスを持つアプリケーションを持っており、インデックスにはほとんどドキュメントをインデックスしませんでした。別のアプリケーションの1つのアプリケーションで使用される弾性検索インデックスの使用方法

 string configvalue1 = ConfigurationManager.AppSettings["http://localhost:9200/"]; 
     var pool = new SingleNodeConnectionPool(new Uri(configvalue1)); 
     var defaultIndex = "zzz"; 

     **settings = new ConnectionSettings(pool) 
     .DefaultIndex(defaultIndex) 
     .MapDefaultTypeNames(m => m.Add(typeof(Class1), "type")) 
     .PrettyJson() 
     .DisableDirectStreaming(); 
     client = new ElasticClient(settings);** 


     if (client.IndexExists(defaultIndex).Exists && ConfigurationManager.AppSettings["syncMode"] == "Full") 
     { 
      client.DeleteIndex(defaultIndex); 
      client.CreateIndex(defaultIndex); 
     } 

     return client; 

は今全体の新しいアプリケーションでは、私はzzzが既存されているかどうかチェックして、ちょうどいくつかの検索操作のためにそれを使用する必要があります。上記のコードで**の間にあるものをすべて書き込むか、プールに接続してインデックスを確認するだけですか?ここで

が私の感想です:

 configvalue1 = ConfigurationManager.AppSettings["http://localhost:9200/"]; 

     var pool = new SingleNodeConnectionPool(new Uri(configvalue1)); 
     settings = new ConnectionSettings(pool); 
     client = new ElasticClient(settings); 

     // to check if the index exists and return if exist 
     if (client.IndexExists("zzz").Exists) 
     { 
      return client; 
     } 

ただ、上記の質問への追加:

私はインデックス化する前にこのようないくつかの条件を実装する:

Index doesnt exist && sync mode == full --> Create index 
Index exist && sync mode==full   --> Delete old index and create a new 
Index doesnt exist && sync mode == new --> Create index 
Index exist && sync mode==new   --> Use the existing index 

TIA

+0

デフォルトのインデックスをもう一度作成する必要はありません。それが存在するかどうかだけをチェックしてください。 – Brduca

+0

あなたのアプローチでエラーが発生しました –

+0

@PandiyanCoolエラーはありませんが、他のインデックスと検索を行っています.. – ASN

答えて

1

あなたは最低でも

が必要です210
string configvalue1 = ConfigurationManager.AppSettings["http://localhost:9200/"]; 
var pool = new SingleNodeConnectionPool(new Uri(configvalue1)); 
var defaultIndex = "zzz"; 

var settings = new ConnectionSettings(pool) 
.DefaultIndex(defaultIndex); 

var client = new ElasticClient(settings); 

if (!client.IndexExists(defaultIndex).Exists && 
    ConfigurationManager.AppSettings["syncMode"] == "Full") 
{ 
    // do something when the index is not there. Maybe create it? 
} 

あなたは、このアプリケーションでClass1を使用することになるだろうし、接続の設定に

.MapDefaultTypeNames(m => m.Add(typeof(Class1), "type")) 

を追加し、すべての要求にそれのための型を指定しない場合。

.PrettyJson() 

これは開発目的のために有用であるが、JSONがインデントされるように、すべての要求と応答が大きくなりますように私は、生産に使用することをお勧めしませんと

。あなたは、アプリケーション側からのすべての要求と応答をログに記録すると言う必要がない限り

同様に、

再び
.DisableDirectStreaming() 

で、私は生産でこれを使用してお勧めしません。この設定により、すべての要求と応答のバイトがMemoryStreamにバッファされ、クライアントの外部で読み取ることができます(例:OnRequestCompleted)。

More details on the settings can be found in the documentation.

+0

こんにちはラス、それはまだ古いインデックスとデータを取得しています。私はこれについて混乱しています。私はサーバ上に30000個のドキュメントを持つ 'postk'というインデックスを持っています。それにインデックス付きの3000個のドキュメントを持つ別のインデックス' zzz'を作成しました。別のアプリケーションでは、この( 'zzz')インデックスが存在するかどうかをチェックしなければなりません。もし存在すれば、これらの3000個のドキュメントすべてのリストを作成しなければなりません。しかし、まだ 'postk'インデックスからデータを探しています。クライアントとインデックスの詳細を出力してそれに応じてチェックする方法はありますか?私はlocalhost上でそれを試してみましたが、インデックスが作成されたサーバではうまく動作しませんでした。TIA – ASN

+0

@ASNでは、要求と応答を確認する方法はたくさんあります。一つの方法は、 'OnRequestCompleted'(https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/connecting.html#complex-logging)を使ってどこかにログアウトすることです。別の方法は、ローカルマシン(http://www.telerik.com/fiddler)からのトラフィックをキャプチャするためにFiddlerのようなWebデバッグプロキシを使用することです。 –

+0

こんにちはラス..情報ありがとうございます。 Visual Studioのアプリケーションをデバッグモードで実行すると、すべてのものがインデックス( 'zzz')uri(' https:/ 192.168.xx/zzz')のようにうまく表示されていましたが、データは他のインデックス( ' postk')。もう一つ興味深いのは、 'string configvalue1 = ConfigurationManager.AppSettings [https:/192.168.xx];を' string configvalue1 = ConfigurationManager.AppSettings [https:/192.168.xx/zzz] 'に変更したときです正しいインデックスからの詳細( 'zzz')。サーバーのデータが間違っているか、コードが間違っているかどうかを調査することがさらに難しくなります。 – ASN

関連する問題