using Nest;
var node = new Uri("http://myserver:9200");
var settings = new ConnectionSettings(node).DefaultIndex("default");
var client = new ElasticClient(settings); 2,创建查询请求
连接到引擎之后,创建搜索请求(SearchRequest),用于封装查询类型和查询条件
SearchRequest sr = new SearchRequest("meetup", "events"); 3,指定查询类型和查询条件
为搜索请求指定查询类型,可以是词条搜索,或全文搜索
//windows
sr.From = 0;
sr.Size = 100;
//sort
ISort sort = new SortField { Field = "eventid", Order = SortOrder.Ascending };
sr.Sort = new List<ISort>();
sr.Sort.Add(sort);
//source filter
sr.Source = new SourceFilter()
{
Includes = new string[] { "eventid", "eventname" },
Excludes = new string[] { "roginalid", "description" }
}; 5,执行查询请求
最后,客户端执行搜索请求,获取搜索结果,并将查询结果中的文档集转换成列表
var result = client.Search<MeetupEvents>(sr);
return result.Documents.ToList<MeetupEvents>(); 二,示例代码,使用Nest客户端搜索文档
在该示例代码中,本文简单列举词条查询,匹配查询,布尔查询和正则表达式查询的示例代码。 1,词条查询
public List<MeetupEvents>GetResult_TermQuery( )
{
//create term query
TermQuery tq = new TermQuery();
tq.Field = "eventname";
tq.Value = "azure";
//create search request
SearchRequest sr = new SearchRequest("meetup", "events");
sr.Query = tq;
//windows
sr.From = 0;
sr.Size = 100;
//sort
ISort sort = new SortField { Field = "eventid", Order = SortOrder.Ascending };
sr.Sort = new List<ISort>();
sr.Sort.Add(sort);
//source filter
sr.Source = new SourceFilter()
{
Includes = new string[] { "eventid", "eventname" },
Excludes = new string[] { "roginalid", "description" }
};
var result = client.Search<MeetupEvents>(sr);
return result.Documents.ToList<MeetupEvents>();
} 2,匹配查询
public List<MeetupEvents> GetResult_MatchQuery()
{
SearchRequest sr = new SearchRequest("meetup", "events");
MatchQuery mq = new MatchQuery();
mq.Field = new Field("eventname");
mq.Query = "azure cloud";
mq.MinimumShouldMatch = 2;
mq.Operator = Operator.Or;
sr.Query = mq;
sr.From = 0;
sr.Size = 100;
sr.Sort = new List<ISort>();
sr.Sort.Add(new SortField { Field = "eventid", Order = SortOrder.Ascending });
ISearchResponse<MeetupEvents> result = client.Search<MeetupEvents>(sr);
return result.Documents.ToList<MeetupEvents>();
} 3,正则表达式查询
public List<MeetupEvents>GetResult_RegexpQuery()
{
SearchRequest sr = new SearchRequest();
RegexpQuery rq = new RegexpQuery();
rq.Field = "description";
rq.Value = "azu.*";
rq.MaximumDeterminizedStates = 20000;
sr.Query = rq;
var result = client.Search<MeetupEvents>(sr);
return result.Documents.ToList<MeetupEvents>();
} 4,布尔查询
public List<MeetupEvents>GetResult_BoolQuery()
{
SearchRequest sr = new SearchRequest("meetup", "events");
BoolQuery bq = new BoolQuery();
bq.Filter = new QueryContainer[]
{
new MatchQuery()
{
Field="eventname",
Query="azure cloud",
Operator=Operator.Or,
MinimumShouldMatch=1
},
new MatchQuery()
{
Field ="eventname",
Query="aws google",
Operator=Operator.Or,
MinimumShouldMatch=1
}
};
bq.Should = new QueryContainer[]
{
new TermQuery()
{
Field="description",
Value="azure"
},
new TermQuery()
{
Field="description",
Value="cloud"
}
};
bq.MinimumShouldMatch = 1;
sr.Query = bq;
var result = client.Search<MeetupEvents>(sr);
return result.Documents.ToList<MeetupEvents>();
} 三,把Query DSL封装成HTTP Request
向ElasticSearch引擎发送Http请求,在http请求中指定查询的类型和查询条件,引擎在收到请求后执行搜索,查询结果以HTTP 响应(Response)返回,开发者需要从Response返回的JSON结构字符串中解析搜索结果。 1,封装类库
以下HTTP网络编程代码,是我们项目组一姐Amy的作品,谢谢Amy的分享,代码可以进一步封装,在此文中,仅仅作为演示: