问题
I have a basic Elasticsearch query that looks like this
POST /fruit/_search
{"query":{"term":{"Name":"banana"}}}
I get result back, no problems when I run in sense.
So I try to do this in elasticsearch.net
var requestBody = new { query = new { term = new { Name = "banana" } } };
var result = client.Search<string>("fruit", requestBody);
And I get no results back. If I just have a search body with new {} then I get hits, but not filtered.
What am I doing wrong?
回答1:
If you use the low level client (elasticsearch.net) directly it will not do any normalisation and serialise the object verbatim:
var query = new { query = new { term = new { Name = "banana" } } };
var json = new ElasticsearchClient().Serializer.Serialize(query).Utf8String();
this will result to the following json:
{
"query": {
"term": {
"Name": "banana"
}
}
}
If you use NEST the default behaviour is to camelCase property names (NEST is opinionated):
{
"query": {
"term": {
"name": "banana"
}
}
}
If you use the low level client through the high level client (client.Raw
) it will use the exact same serialisation settings as the high level client.
You can control this behaviour on the high level client through:
var connectionSettings = new ConnectionSettings()
.SetDefaultPropertyNameInferrer(p=>p);
var client = new ElasticClient(connectionSettings);
来源:https://stackoverflow.com/questions/26434104/elasticsearch-net-client-cant-do-basic-search