当前位置: 代码迷 >> 综合 >> 记 NEST 的一次简单使用
  详细解决方案

记 NEST 的一次简单使用

热度:50   发布时间:2024-01-26 22:42:42.0

目录

  • 简单来说
  • 具体使用
    • 建立连接
    • 查询
  • 参考资料

简单来说

Elasticsearch 是一个分布式的全文搜索、分析引擎。当然,他很强大,可以做很多事情,但这暂时不重要。类似的东西,近期接触了 Solr,都是与 JSON 对象(当然,这是个很印象性的描述,它们当然可以呈现成不一样的数据格式,但大差不差)打交道。而 NEST 是一个高层的 .Net 客户端,是基于 Elasticsearch 的 API 们的。需要注意的是,NEST 通过属性类解析出的返回,是_source filed 内的诸项,而与 _source 同级的 _index 以及 _type 等可用于查询限定,比如:

var settings = new ConnectionSettings(new Uri("http://127.0.0.1:9200")).DefaultIndex("test").DefaultTypeName("data");

依据如上 settings 建立 ElasticClient,则搜索所用的数据源范围被限定在所有 _index 字段值为 “test” 、_type 字段值为 “data” 的数据中。


具体使用

本次简单使用仅包括查询,因为本次仅用到了查询。人类是一种靠事件驱动的类。


建立连接

在查询前,首先得建立一个 ElasticClient 实例,而当 Elasticsearch 跑在远端或者调整活动端口等时,则需要在实例化 ElasticClient 时,提供一个 ConnectionSettings 实例。具体如下:

var settings = new ConnectionSettings(new Uri("http://localhost:9200")).DefaultIndex("test").DefaultTypeName("data");
var client =  new ElasticClient(settings);

当有多个 Uri 时,可建立连接池:

var uris = new[]
{new Uri("http://localhost:9200"),new Uri("http://localhost:9201"),new Uri("http://localhost:9202"),
};
var settings = new ConnectionSettings(uris).DefaultIndex("test").DefaultTypeName("data");
var client =  new ElasticClient(settings);

当然,连接池有好几种(它们总不止一种),出于对英语的热爱,我并没有深究。


查询

查询也有好多种写法,热爱,没深究。我采用了这种:

var searchResponse = client.Search<NodeObject>(s => s
.From(0) 
.Size(10)
.Query(q => q.Match(m => m.Field(f => f.certainID).Query("1234567"))));

其中,NodeObject 人如其名,是个属性类;From 指从查询到的数据的第几条(0是1,业界共识)开始返回,而 Size 则限定返回的数据条数,二者相当于框定了一个区间。

就酱。


参考资料

[1] NEST - High level client
[2] Elasticsearch introduction