本文共 1522 字,大约阅读时间需要 5 分钟。
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(s => s.From(0) .Size(10).Query(q => q .Match(m => m .Field(f => f.certainID) .Query("1234567"))));
其中,NodeObject
人如其名,是个属性类;From
指从查询到的数据的第几条(0是1,业界共识)开始返回,而 Size
则限定返回的数据条数,二者相当于框定了一个区间。
就酱。
[1]
[2]转载地址:http://xqbws.baihongyu.com/