目录
- 简单来说
- 具体使用
- 建立连接
- 查询
- 参考资料
简单来说
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