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

标签 c# elasticsearch nest 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<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/

相关文章:

elasticsearch - 是否存在可以快速有效地执行邻近搜索的索引结构(数据结构)或算法?

c# - 已发布的 ASP.NET MVC 网站中的计时器问题

java - 使用 Java API 在 elasticsearch-2.2.0 中启用脚本

c# - 快速连续的随机数

elasticsearch - Elasticsearch外语停用词

c# - 在Elastic Search NEST Client 6.X中的特定字段中使用动态字符串数组进行搜索

elasticsearch - 使用多个索引嵌套 ElasticClient 以索引文档

c# - 如何在 Elasticsearch NEST 中序列化 JToken 或 JObject 类型的属性?

c# - Entity Framework 中的 NEWID() SQL Server 函数

c# - Observable.Timer 或 TPL with Task.Delay