Ben*_*ual 1 c# elasticsearch nest elasticsearch-net
我尝试使用 NEST ElasticClient 执行搜索并仅获取命中的 _id 。
这是我的代码:
var client = new ElasticClient();
var searchResponse = client.Search<ElasticResult>(new SearchRequest {
From = this.query.Page * 100,
Size = 100,
Source = new SourceFilter {
Includes = "_id"
},
Query = new QueryStringQuery {
Query = this.query.Querystring
}
});
public class ElasticResult {
public string _id;
}
Run Code Online (Sandbox Code Playgroud)
但文档(ElasticResult-Objects)的 _id 始终为 null。我究竟做错了什么?
它_id不是_source文档的一部分,而是命中数组中每个命中的命中元数据的一部分。
仅返回字段的最紧凑方法_id是使用响应过滤,该过滤FilterPath在 NEST 中公开
private static void Main()
{
var defaultIndex = "documents";
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex)
.DefaultTypeName("_doc");
var client = new ElasticClient(settings);
if (client.IndexExists(defaultIndex).Exists)
client.DeleteIndex(defaultIndex);
client.Bulk(b => b
.IndexMany<object>(new[] {
new { Message = "hello" },
new { Message = "world" }
})
.Refresh(Refresh.WaitFor)
);
var searchResponse = client.Search<object>(new SearchRequest<object>
{
From = 0 * 100,
Size = 100,
FilterPath = new [] { "hits.hits._id" },
Query = new QueryStringQuery
{
Query = ""
}
});
foreach(var id in searchResponse.Hits.Select(h => h.Id))
{
// do something with the ids
Console.WriteLine(id);
}
}
Run Code Online (Sandbox Code Playgroud)
Elasticsearch 对搜索请求的 JSON 响应如下所示
{
"hits" : {
"hits" : [
{
"_id" : "6gs8lmQB_8sm1yFaJDlq"
},
{
"_id" : "6Qs8lmQB_8sm1yFaJDlq"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)