2016-10-06 3 views
1

に移動することは可能ですか?私は現在.NET ElasticSearchクライアントとしてPlainElasticを使用しています。 公式.NETクライアントNEST に移動することを検討していますか?一般的なエラスティックサーチから公式の.NetクライアントNEST

  1. NESTはSSLをサポートしていますか?
  2. 共通のクエリを実行できますか?
  3. 一般集計の操作方法は? ネストに移動するまでに時間がかかります。

答えて

1

1.NESTはSSL/TLSをサポートしています。ただ、ConnectionSettings

var pool = new SingleNodeConnectionPool(new Uri("https://localhost:9200")); 
var connectionSettings = new ConnectionSettings(pool); 

var client = new ElasticClient(connectionSettings); 

2.NESTであなたのURLを指定するクエリ全体のDSLを含むElasticsearchで提供されるAPIのすべてをサポートしています。例

client.Search<Conference>(s => s 
    .Query(q => q 
     .Bool(b => b 
      .Should(sh => sh 
       .Match(m => m 
        .Field(f => f.Location) 
         .Query("Sydney") 
       ), sh => sh 
       .Match(m => m 
         .Field(f => f.Location) 
         .Query("Spektrum") 
         .Boost(2) 
       ) 
      ) 
      .Filter(fi => fi 
       .Term(t => t 
        .Field(f => f.Name.Suffix("raw")) 
        .Value("NDC") 
       ) 
      ) 
     ) 
    ) 
); 

NESTは、構築、クエリをさらに容易にするためにinferenceoperator overloadingなどの機能を持っています。ここで

client.Search<Conference>(s => s 
    .Query(q => (q 
     .Match(m => m 
      .Field(f => f.Location) 
       .Query("Sydney") 
     ) || q 
     .Match(m => m 
       .Field(f => f.Location) 
       .Query("Spektrum") 
       .Boost(2) 
     )) && +q 
     .Term(t => t 
      .Field(f => f.Name.Suffix("raw")) 
      .Value("NDC") 
     ) 
    ) 
); 

3.NESTを演算子オーバーロードして、以前のクエリがすべて集計をサポートしています。ここでは、2015年6月29日以降に作成され、 "dnx"または ".net-core"というタグが付いた質問を見て、stackoverflowデータセットに対するクエリのかなり複雑な例を示します。

これらの質問では、terms aggregationがタグ"dnx"タグと ".net-core"タグだけが表示されます。各用語バケットでは、date histogram aggregationが実行され、各バケット内の質問数にa count performed、質問番号に対してHolt-Winters moving average aggregationが実行されて、1週間の間隔で質問がバケットされます。

var response = client.Search<Question>(s => s 
    .Size(0) 
    .Query(q => +q 
     .Terms(m => m 
      .Field(f => f.Tags) 
      .Terms("dnx", ".net-core") 
     ) && +q 
     .DateRange(r => r 
      .Field(f => f.CreationDate) 
      .GreaterThan(new DateTime(2015, 06, 29)) 
     ) 
    ) 
    .Aggregations(a => a 
     .Terms("tags", t => t 
      .Field(f => f.Tags) 
      .Include(@"dnx|\.net\-core") 
      .Aggregations(sub => sub 
       .DateHistogram("weekly_questions", dh => dh 
        .Field(f => f.CreationDate) 
        .Interval("1w") 
        .Aggregations(sa => sa 
         .ValueCount("count_questions", vc => vc 
          .Field(f => f.Id) 
         ) 
         .MovingAverage("questions", ma => ma 
          .BucketsPath("count_questions.value")  
          .Window(12) 
          .Model(mo => mo 
           .HoltWinters(hw => hw 
            .Type(HoltWintersType.Additive)          
           ) 
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    ) 
); 
関連する問題