1:引用dll
using Elasticsearch.Net;
using Nest;
2:代码(如下代码是查询以及创建index的基本用法,包含模糊查询和精确查询)
var node = new Uri("http://localhost:9200");
var connectionPool = new SniffingConnectionPool(new[] { node });
var config = new ConnectionConfiguration(connectionPool).DisableDirectStreaming().BasicAuthentication("admin", "123qwe!@#").RequestTimeout(TimeSpan.FromSeconds(60));
var client = new ElasticLowLevelClient(config);
var settings = new ConnectionSettings(new Uri("http://localhost:9200")).DefaultIndex("2017.03.08").DisableDirectStreaming();
var client1 = new ElasticClient(settings);
var request = new SearchRequest
{
From = 0,
Size = 10,
//Query = new TermQuery { Field = "Name", Value = "FundPayService" },
PostFilter = new QueryContainer(new MatchAllQuery())
};
//var response = client1.Search<logs>(request);
//var result = client1.Search<logs>(s => s.Query(q => q.MatchAll()));
//IReadOnlyCollection<logs> content = result.Documents;
//按照字段查询--或关系
var r1 = new SearchRequest { Query = new MatchQuery { Field = "IP", Query = " BACKEND1" } };
var result2 = client1.Search<logs>(r1);
//var r4 =client1.Search<logs>(s => s.Query(b => b.QueryString(t1 => t1.DefaultField("IP").Query("BACKEND"))));
var filter= new SearchRequest<logs>
{
Query = new MatchQuery
{
Field = "IP",
Query = "BACKEND"
}
};
var result4 = client1.Search<logs>(filter);
IReadOnlyCollection<logs> content2 = result2.Documents;
//模糊查询1
var r5 = client1.Search<logs>(s => s.Query(q => q.QueryString(p => p.Query("BACKEN*"))));
var r55 = r5.Documents;
//模糊查询2
var filter2 = new SearchRequest<logs>
{
Query =new MatchQuery
{
Field = "IP",
Query = "BACKEN"
}
};
r5 = client1.Search<logs>(filter2);
//范围查询
//下面这段代码会查询不出任何东西。因为生成json中的field字段:Scur 是为scur。 由于elastic里面的字段是Scur。导致无法找到该字段。建议以后elastic里面的字段都为小写
//var r6 = client1.Search<logs>(s => s.Query(q => q.Range(p=>p.Field(obj=>obj.Scur).GreaterThanOrEquals(1).LessThanOrEquals(5))));
var r6 = client1.Search<logs>(s => s.Query(q => q.Range(p => p.Field("Scur").GreaterThanOrEquals(1).LessThanOrEquals(5))));
var r66 = r5.Documents;
//创建索引 索引字段必须小写
ICreateIndexResponse icr =client1.CreateIndex("ip2");
//建立索引连接
var settings2 = new ConnectionSettings(new Uri("http://localhost:9200")).DefaultIndex("ip2").DisableDirectStreaming();
var client2 = new ElasticClient(settings2);
IIndexResponse iir =client2.Index<logs>(new logs { IP = "F", Scur = "2" });
//查询所有index数据
var r7 =client2.Search<logs>(q => q.MatchAll()).Documents;
//对于简单结构的数据
var r8 = client2.Search<logs>(p => p.Query(q => q.Term(f => f.Field(obj => obj.IP).Value('F'))));
r8 = client2.Search<logs>(p => p.PostFilter(q => q.Term(f => f.Field(obj => obj.IP).Value('F'))));
//对于有嵌套结构的数据
r8 = client2.Search<logs>(p => p.Query(q => q.Nested(x => x.Query(k => k.Term(c => c.Field(obj => obj.IP).Value('F'))))));
var r88=r8.Documents;
如果发现代码和出来的效果不一致,可以通过断点调试查看api字段里拼接好的查询条件,拷贝放进elasticsearch中的复合查询界面,查看哪里出了问题。
--复合查询界面在插件head里,需要自己安装。