[英]Elastic search querying without Nest
我已经厌倦了尝试找出如何使用Nest进行查询的方式-似乎总是会推断出错误的网址以将搜索请求发布到?
无论如何-我整理了看起来很丑陋的代码,似乎很有效:
using (var client = new HttpClient())
{
client.BaseAddress = node;
var content = new StringContent("{\"size\": 0,\"query\": {\"bool\": {\"must\": [{\"wildcard\": {\"FlogDetail.AdditionalInfo.QueryString-filter[slug]\": \"*" + slug + "*\"}},{\"range\": {\"@timestamp\": {\"gte\": \"now-1d/d\",\"lt\": \"now\"}}}]}},\"aggs\": {\"results\": {\"date_histogram\": {\"field\": \"@timestamp\",\"interval\": \"hour\"}}}}", Encoding.UTF8, "application/json");
var result = await client.PostAsync(@"usage*/_search", content);
string resultContent = await result.Content.ReadAsStringAsync();
JObject o = JObject.Parse(resultContent);
return o;
}
现在,在我使它更加理智和美观之前,像这样查询ES是否存在任何问题?
我使用Nest的主要问题是,我看不到查询通配符索引的方法,您可以看到我可以使用普通的旧C#进行处理
如果有人知道最后的答案,我将不胜感激!
以您所建议的方式查询Elasticsearch并没有错。 NEST支持查询通配符,单个索引,多个索引,例如
var searchResponse = client.Search<MyDocument>(s => s
.Index("usage*")
.AllTypes()
.Query(q => q
.MatchAll()
)
);
发送以下请求
POST http://localhost:9200/usage*/_search
{
"query": {
"match_all": {}
}
}
NEST的约定是将POCO映射到索引内的类型,您可以使用ConnectionSettings
上的DefaultMappingFor<T>(...)
为给定的POCO设置约定
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool)
.DefaultMappingFor<MyDocument>(m => m
.IndexName("usage*")
);
var client = new ElasticClient(settings);
var searchResponse = client.Search<MyDocument>(s => s
.AllTypes()
.Query(q => q
.MatchAll()
)
);
对于指定的POCO,没有约定指定应省略类型名称的约定,因此在搜索请求中仍需要对.AllTypes()
的调用,以在与usage*
匹配的索引中搜索所有类型usage*
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.