我有一个使用Elastic NEST SDK的C# API。我的Elastic版本是v8.4,它将Elastic搜索查询作为JSON请求。
我尝试使用这个JSON请求和索引名称创建NEST请求对象SearchRequest<T>
。
这是我的助手方法,它试图将JSON请求反序列化为QueryContainer
,但它总是返回空QueryContainer
,导致搜索没有查询。
public static SearchRequest<T> GetSearchRequestFromJson<T>(string json, string indexName) where T : class
{
var request = new SearchRequest<T>(indexName);
request.Query = JsonConvert.DeserializeObject<QueryContainer>(json);
return request;
}
查看其他示例,他们手动MapJSON请求,但请求是动态的,因此我希望尽可能避免基于JSON请求的任何手动对象示例化
最好的做法是什么?我需要重构并使用低级客户端来支持JSON请求吗?
1条答案
按热度按时间ycl3bljg1#
您可以使用NEST的低级功能来处理动态JSON请求,而不是直接将JSON请求反序列化为QueryContainer对象。这种方法允许您使用原始JSON,而不需要手动对象示例化。
下面是一个示例,说明如何修改helper方法以使用低级客户端:
}
在这个修改后的方法中,我们没有将JSON反序列化到QueryContainer中,而是使用NEST中的RawJson类将原始JSON请求分配给SearchRequest对象的RawQuery属性。这样,JSON查询将按原样发送到ElasticSearch,而无需任何额外的Map或反序列化。
通过使用RawQuery属性,您可以处理动态JSON请求,而无需手动对象示例化或Map。这种方法利用了NEST的低级客户端功能,并允许您直接使用原始JSON查询。
请记住使用适当的ElasticSearch版本正确配置和初始化您的NEST客户端,以确保兼容性。