Emi*_*l C 5 c# elasticsearch nest elasticsearch-net
我有一个基本的Elasticsearch查询,看起来像这样
POST /fruit/_search
{"query":{"term":{"Name":"banana"}}}
Run Code Online (Sandbox Code Playgroud)
我得到了结果,当我在意义上运行时没有问题.
所以我尝试在elasticsearch.net中这样做
var requestBody = new { query = new { term = new { Name = "banana" } } };
var result = client.Search<string>("fruit", requestBody);
Run Code Online (Sandbox Code Playgroud)
我没有得到任何结果.如果我只有一个带有新{}的搜索主体,那么我会点击,但不会过滤.
我究竟做错了什么?
如果您直接使用低级客户端(elasticsearch.net),它将不会进行任何规范化并逐字序列化该对象:
var query = new { query = new { term = new { Name = "banana" } } };
var json = new ElasticsearchClient().Serializer.Serialize(query).Utf8String();
Run Code Online (Sandbox Code Playgroud)
这将导致以下json:
{
"query": {
"term": {
"Name": "banana"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果你使用NEST,默认行为是camelCase属性名称(NEST是自以为是):
{
"query": {
"term": {
"name": "banana"
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您通过高级客户端(client.Raw)使用低级客户端,它将使用与高级客户端完全相同的序列化设置.
您可以通过以下方式在高级客户端上控制此行为:
var connectionSettings = new ConnectionSettings()
.SetDefaultPropertyNameInferrer(p=>p);
var client = new ElasticClient(connectionSettings);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3826 次 |
| 最近记录: |