我有一个基本的Elasticsearch查询,看起来像这样
POST /fruit/_search {"query":{"term":{"Name":"banana"}}}
我得到了结果,从合理的角度来看,这没有问题。
所以我尝试在elasticsearch.net中做到这一点
var requestBody = new { query = new { term = new { Name = "banana" } } }; var result = client.Search<string>("fruit", requestBody);
而且我没有任何结果。如果我只有一个带有新{}的搜索正文,那么我会获得点击率,但不会被过滤。
我究竟做错了什么?
如果直接使用低级客户端(elasticsearch.net),它将不会进行任何规范化处理并逐字序列化对象:
var query = new { query = new { term = new { Name = "banana" } } }; var json = new ElasticsearchClient().Serializer.Serialize(query).Utf8String();
这将导致以下json:
{ "query": { "term": { "Name": "banana" } } }
如果使用NEST,则默认行为是camelCase属性名称(NEST被认为是):
{ "query": { "term": { "name": "banana" } } }
如果您通过高级客户端(client.Raw)使用低级客户端,它将使用与高级客户端完全相同的序列化设置。
client.Raw
您可以通过以下方法在高级客户端上控制此行为:
var connectionSettings = new ConnectionSettings() .SetDefaultPropertyNameInferrer(p=>p); var client = new ElasticClient(connectionSettings);