我有一个基本的 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,则默认行为是驼峰式属性名称(NEST 是自以为是的):
{
"query": {
"term": {
"name": "banana"
}
}
}
如果您通过高级客户端 (client.Raw
) 使用低级客户端,它将使用与高级客户端完全相同的序列化设置。
您可以通过以下方式在高级客户端上控制此行为:
var connectionSettings = new ConnectionSettings()
.SetDefaultPropertyNameInferrer(p=>p);
var client = new ElasticClient(connectionSettings);
关于c# - Elasticsearch.net 客户端无法进行基本搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26434104/