2016-05-09 7 views
0

私はElasticSearchで検索操作をしようとしています。しかし、私が検索クエリを呼び出すと、クライアントは他のいくつかのインデックスを指しています(以前はこれを使用していました)。検索クエリの実行中に弾性検索クライアントが別のインデックスを指している

これは私の設定を行う方法です。

のWeb.config:

<appSettings> 
    <add key="url" value="http://localhost:9200" /> 
</appSettings> 

      configvalue1 = ConfigurationManager.AppSettings["url"]; 
      var pool = new SingleNodeConnectionPool(new Uri(configvalue1)); 
      var defaultIndex = "abc"; 

      settings = new ConnectionSettings(pool); 
      client = new ElasticClient(settings); 


      if (client.IndexExists(defaultIndex).Exists) 
       client.DeleteIndex(defaultIndex); 

      var createIndexResponse = 
       client.CreateIndex(defaultIndex); 

      return client; 

私はいくつかの検索操作のために、このクライアントを使用しています。 (:ZZZなどのために)

string query = @"{ 
          ""query"": { 
           ""bool"": { 
            ""should"": [ 
             { 
              ""match"": { 
              ""title"": {0} 
                 } 
             }, 
             { 
              ""match"": { 
              ""content"": {0} 
                 } 
             } 
            ] 
            } 
           }}; 

string a = query.Replace("{0}", "apple"); 
var callResult = client.LowLevel.Search<string>(a); 

私はcallResultチェック

は、私は別のインデックスにインデックスが作成されたドキュメントから結果を取得しています。これに関して何かしなければならないことはありますか?

TIA

+0

"a" –

+0

のどこに 'configvalue1'の値がありますか?接続設定のデフォルトインデックスを 'defaultIndex'に設定していないようです。検索呼び出しの 'a'の値は何ですか?インデックス名はどこで設定していますか? –

+0

@RussCam ...私は投稿を編集し、いくつかの値を更新しました。低レベルの検索呼び出し中にインデックス名を追加すると、正しく機能します。その場合、私はまだindexsetをconnectionsettingsに追加する必要がありますか? – ASN

答えて

0

あなたが「ABC」インデックスを検索のみに弾性言っていないので、問題がある、あなたは9200

localhostのポート上のすべてのインデックスを照会するためにそれを言っているあなたがする必要があるすべてdoはA.です。あなたのインデックス名を最初に宣言し、次にB.あなたが作成しているUriにそれを(/を付けて)追加して、そのインデックス内でのみクエリを行うようにします。私は以下の最初の3行をリファクタリングしました:

 var defaultIndex = "abc"; 
     configvalue1 = ConfigurationManager.AppSettings["url"] + "/" + defaultIndex; 
     var pool = new SingleNodeConnectionPool(new Uri(configvalue1)); 

ここで、server/port/indexに直接行くためにUriを生成しています。

これは、別の呼び出しである必要がある削除/作成インデックス呼び出しを破ることになります。インデックス名を定義し、それを呼び出してインデックスを削除/作成してから編集された例でクエリUriを作成します。

+0

を入力しても、接続設定のデフォルトのインデックス名が使用されます。実際に私はそれを理解しました。私は言ったようにそれをクライアントに割り当てていません。だから行動です...あなたの時間を取ってくれてありがとう – ASN

0

異なるインデックスで実行されている理由がわかりました。その理由は、インデックスを作成したにもかかわらず、それをクライアントに割り当てたことがないからです。行動もそうです。そこでインデックスに設定を追加しました。

configvalue1 = ConfigurationManager.AppSettings["url"]; 
      var pool = new SingleNodeConnectionPool(new Uri(configvalue1)); 
      var defaultIndex = "abc"; 

      settings = new ConnectionSettings(pool)*.DefaultIndex(defaultIndex);* 
      client = new ElasticClient(settings); 
関連する問題