Mar*_*lsh 44 elasticsearch nest
是否可以从NEST客户端获取原始搜索查询?
var result = client.Search<SomeType>(s => s
.AllIndices()
.Type("SomeIndex")
.Query(query => query
.Bool(boolQuery => BooleanQuery(searchRequest, mustMatchQueries)))
);
Run Code Online (Sandbox Code Playgroud)
我真的很想调试为什么我会得到一定的结果.
Rob*_*Rob 26
您可以从RequestInformation以下位置获取原始查询json :
var rawQuery = Encoding.UTF8.GetString(result.RequestInformation.Request);
Run Code Online (Sandbox Code Playgroud)
或者在ConnectionSettings对象上启用跟踪,因此NEST将打印每个请求以跟踪输出
var connectionSettings = new ConnectionSettings(new Uri(elasticsearchUrl));
connectionSettings.EnableTrace(true);
var client = new ElasticClient(connectionSettings);
Run Code Online (Sandbox Code Playgroud)
Tod*_*ier 21
执行此操作的方法似乎随每个主要版本而变化,因此答案数量令人困惑.如果你想在NEST 6.x中使用它,并且你希望在实际发送之前看到反序列化的请求,那么它很容易:
var json = elasticClient.RequestResponseSerializer.SerializeToString(request);
Run Code Online (Sandbox Code Playgroud)
如果你在Visual Studio中进行调试,在这一行之后放置一个断点很方便,当你点击它时,将鼠标悬停在json上面的变量上并点击放大镜.您将获得一个很好的格式化JSON视图.
Hen*_*y C 16
在ElasticSearch 5.x中,该RequestInformation.Request属性不存在的ISearchResponse<T>,而是类似于为这里的答案你就可以使用弹性客户端串行和好SearchDescriptor原始查询JSON.例如,对于给定的NEST搜索查询:
var results = elasticClient.Search<User>(s => s
.Index("user")
.Query(q => q
.Exists(e => e
.Field("location")
)
)
);
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式获取原始查询JSON:
SearchDescriptor<User> debugQuery = new SearchDescriptor<User>()
.Index("user")
.Query(q => q
.Exists(e => e
.Field("location")
)
)
;
using (MemoryStream mStream = new MemoryStream())
{
elasticClient.Serializer.Serialize(debugQuery, mStream);
string rawQueryText = Encoding.ASCII.GetString(mStream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*lor 16
对于NEST/Elasticsearch.NET v6.0.2,请使用IResponse对象的ApiCall属性.您可以编写一个方便的扩展方法,如下所示:
public static string ToJson(this IResponse response)
{
return Encoding.UTF8.GetString(response.ApiCall.RequestBodyInBytes);
}
Run Code Online (Sandbox Code Playgroud)
或者,如果要记录对Elastic发出的所有请求,可以使用连接对象拦截响应:
var node = new Uri("https://localhost:9200");
var pool = new SingleNodeConnectionPool(node);
var connectionSettings = new ConnectionSettings(pool, new HttpConnection());
connectionSettings.OnRequestCompleted(call =>
{
Debug.Write(Encoding.UTF8.GetString(call.RequestBodyInBytes));
});
Run Code Online (Sandbox Code Playgroud)
Jay*_*hah 13
在发出请求之前,从Nest Query - For Nest 5.3.0:
var stream = new System.IO.MemoryStream();
elasticClient.Serializer.Serialize(query, stream );
var jsonQuery = System.Text.Encoding.UTF8.GetString(stream.ToArray());
Run Code Online (Sandbox Code Playgroud)
在Nest版本6上使用
connextionString.DisableDirectStreaming();
Run Code Online (Sandbox Code Playgroud)
然后在response.DebugInformation上,您可以看到所有信息。
| 归档时间: |
|
| 查看次数: |
21608 次 |
| 最近记录: |