使用 Elasticsearch 按 ID 搜索不返回
Searching by ID with Elasticsearch not returning
我有一个控制器,其中包含一种使用 NEST 根据其 ID 检索数据的方法。在 Kibana 的 CLI 上,我获取它显示的 ID 并将其粘贴到 swagger 网络应用程序中以查看它是否会填充但它不会(returns a 204)。
Swagger(asp.net 核心网站 api)
在我的 GET 方法中,我首先尝试使用 SearchAsync,但它不起作用,所以我切换到 GetAsync,但仍然无法正常工作。不知道为什么这不起作用,如果在我的模型 class 中,我创建了所有属性以匹配 CLI 屏幕截图第 22 行中的 _source
。 有没有人知道为什么它不返回我需要它做的事情而只显示 204?
[HttpGet("{id}")]
public async Task<EsSource> Get(String id)
{
/* var response = await _elasticClient.SearchAsync<EsSource>(s => s
.Index("elastic-search-app-logs*")
.Query(q => q.Match(m => m.Field(f => f.TimeStamp).Query(id))));*/
var response = await _elasticClient.GetAsync<EsSource>(new DocumentPath<EsSource>(
new Id(id)), x => x.Index("elastic-search-app-logs*"));
return response?.Source;
}
我的模特class
namespace ESPractice.Models
{
public class EsSource
{
public String TimeStamp { get; set; }
public String Level { get; set; }
public String MessageTemplate { get; set; }
public String Message { get; set; }
}
public class EsExceptions
{
public String Depth { get; set; }
public String ClassName { get; set; }
public String Message { get; set; }
public String Source { get; set; }
public String StackTraceString { get; set; }
public String RemoteStackTraceString { get; set; }
public String RemoteStackIndex { get; set; }
public String HResult { get; set; }
public String HelpURL { get; set; }
}
public class EsFields
{
public String SourceContext { get; set; }
public String ActionId { get; set; }
public String ActionName { get; set; }
public String RequestId { get; set; }
public String RequestPath { get; set; }
public String ConnectionId { get; set; }
public String MachineName { get; set; }
public String Environment { get; set; }
}
}
您可以通过 await _client.GetAsync<EsSource>(id, x => x.Index("elastic-search-app-logs*"));
简单地拨打电话
您还可以启用调试,这样您将收到有关发送到 elasticsearch 的内容以及所描述的响应内容的详细信息 here。
如果你想调试你可以做的单个调用(确保它没有为生产启用)
var response = client.Search<Project>(s => s
.RequestConfiguration(r => r
.DisableDirectStreaming()
)
.Query(q => q
.MatchAll()
)
);
查看 response.DebugInformation
了解更多详情。
我有一个控制器,其中包含一种使用 NEST 根据其 ID 检索数据的方法。在 Kibana 的 CLI 上,我获取它显示的 ID 并将其粘贴到 swagger 网络应用程序中以查看它是否会填充但它不会(returns a 204)。
Swagger(asp.net 核心网站 api)
在我的 GET 方法中,我首先尝试使用 SearchAsync,但它不起作用,所以我切换到 GetAsync,但仍然无法正常工作。不知道为什么这不起作用,如果在我的模型 class 中,我创建了所有属性以匹配 CLI 屏幕截图第 22 行中的 _source
。 有没有人知道为什么它不返回我需要它做的事情而只显示 204?
[HttpGet("{id}")]
public async Task<EsSource> Get(String id)
{
/* var response = await _elasticClient.SearchAsync<EsSource>(s => s
.Index("elastic-search-app-logs*")
.Query(q => q.Match(m => m.Field(f => f.TimeStamp).Query(id))));*/
var response = await _elasticClient.GetAsync<EsSource>(new DocumentPath<EsSource>(
new Id(id)), x => x.Index("elastic-search-app-logs*"));
return response?.Source;
}
我的模特class
namespace ESPractice.Models
{
public class EsSource
{
public String TimeStamp { get; set; }
public String Level { get; set; }
public String MessageTemplate { get; set; }
public String Message { get; set; }
}
public class EsExceptions
{
public String Depth { get; set; }
public String ClassName { get; set; }
public String Message { get; set; }
public String Source { get; set; }
public String StackTraceString { get; set; }
public String RemoteStackTraceString { get; set; }
public String RemoteStackIndex { get; set; }
public String HResult { get; set; }
public String HelpURL { get; set; }
}
public class EsFields
{
public String SourceContext { get; set; }
public String ActionId { get; set; }
public String ActionName { get; set; }
public String RequestId { get; set; }
public String RequestPath { get; set; }
public String ConnectionId { get; set; }
public String MachineName { get; set; }
public String Environment { get; set; }
}
}
您可以通过 await _client.GetAsync<EsSource>(id, x => x.Index("elastic-search-app-logs*"));
您还可以启用调试,这样您将收到有关发送到 elasticsearch 的内容以及所描述的响应内容的详细信息 here。
如果你想调试你可以做的单个调用(确保它没有为生产启用)
var response = client.Search<Project>(s => s
.RequestConfiguration(r => r
.DisableDirectStreaming()
)
.Query(q => q
.MatchAll()
)
);
查看 response.DebugInformation
了解更多详情。