に移動することは可能ですか?私は現在.NET ElasticSearchクライアントとしてPlainElasticを使用しています。 公式.NETクライアントNEST に移動することを検討していますか?一般的なエラスティックサーチから公式の.NetクライアントNEST
- NESTはSSLをサポートしていますか?
- 共通のクエリを実行できますか?
- 一般集計の操作方法は? ネストに移動するまでに時間がかかります。
に移動することは可能ですか?私は現在.NET ElasticSearchクライアントとしてPlainElasticを使用しています。 公式.NETクライアントNEST に移動することを検討していますか?一般的なエラスティックサーチから公式の.NetクライアントNEST
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は、構築、クエリをさらに容易にするためにinferenceとoperator 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)
)
)
)
)
)
)
)
)
);