Elasticsearch.net客户端无法进行基本搜索

我有一个基本的Elasticsearch查询,看起来像这样

POST /fruit/_search {"query":{"term":{"Name":"banana"}}} 

我得到了结果,当我在意义上跑时没有问题。

所以我尝试在elasticsearch.net中这样做

 var requestBody = new { query = new { term = new { Name = "banana" } } }; var result = client.Search("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 )使用低级客户端,它将使用与高级客户端完全相同的序列化设置。

您可以通过以下方式在高级客户端上控制此行为:

 var connectionSettings = new ConnectionSettings() .SetDefaultPropertyNameInferrer(p=>p); var client = new ElasticClient(connectionSettings);