是否有可能从普通弹性搜索转移到官方.net客户端NEST

时间:2016-10-06 15:39:27

标签: .net elasticsearch nest

我目前正在使用PlainElastic作为我的.NET ElasticSearch客户端。 我考虑转移到官方的.NET客户端NEST 有问题吗?

  1. NEST是否支持SSL?
  2. 我们可以进行常见查询吗?
  3. 如何进行常见聚合? 是否需要很长时间才能进入巢穴。

1 个答案:

答案 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具有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支持所有聚合。这是一个相当复杂的针对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)                                     
                                )
                            )
                        )
                    )
                )
            )
        )
    )
);