我目前正在使用PlainElastic作为我的.NET ElasticSearch客户端。 我考虑转移到官方的.NET客户端NEST 有问题吗?
答案 0 :(得分: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支持Elasticsearch公开的API的所有,包括整个查询DSL。一个例子
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支持所有聚合。这是一个相当复杂的针对stackoverflow数据集的查询示例,查看标记的问题&#34; dnx&#34;或&#34; .net-core&#34;并于2015年6月29日创建。
在这些问题上,terms aggregation会在代码字段上执行,但只会查看&#34; dnx&#34;和#34; .net-core&#34;标签。在每个术语桶中,执行date histogram aggregation以将问题存储为1周的时间间隔,每个存储桶中的问题数量为a count performed,并对问题编号执行Holt-Winters moving average aggregation。
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)
)
)
)
)
)
)
)
)
);