【问题标题】:Execute raw JSON request using NEST / Elasticsearch.Net使用 NEST / Elasticsearch.Net 执行原始 JSON 请求
【发布时间】:2018-10-11 16:03:48
【问题描述】:

使用纯 JSON 编写一些(高级)请求比使用 NEST 提供的语法更容易。 在IElasticLowLevelClient 接口中有一个CreatePostAsync,但它专门使用Index API。

我不想直接使用HttpClient,因为这样我就缺少maximum retries 等功能。

是否可以使用 NEST / Elasticsearch.Net 客户端向 Elasticsearch(GETPOST 等)发出任何请求?

【问题讨论】:

  • 您是在谈论发送文字 json 吗?所有操作的低级客户端调用都采用 json 格式的字符串,示例见此处github.com/elastic/elasticsearch-net/blob/…
  • @sramalingam24 是的,对于我的_reindex 示例,LowLevel 客户端上的ReindexAsync<StringResponse>(PostData.String("my-json") 之类的东西确实可以工作,谢谢!
  • 酷,没问题

标签: c# elasticsearch nest


【解决方案1】:

如果你想提出任何请求,你可以在低级客户端使用DoRequest/DoRequestAsync

var lowLevelClient = new ElasticLowLevelClient();

var stringResponse = lowLevelClient.DoRequest<StringResponse>(
    HttpMethod.POST, 
    "_search", 
    PostData.Serializable(new
    {
        query = new { match_all = new { } }
    }));  

也在高级客户端 NEST 上的 .LowLevel 属性中公开

var client = new ElasticClient();

var stringResponse = client.LowLevel.DoRequest<StringResponse>(
    HttpMethod.POST, 
    "_search", 
    PostData.Serializable(new
    {
        query = new { match_all = new { } }
    }));

【讨论】:

  • 这很适合用于 LowLevel 客户端的非内置命令,谢谢!
  • @Kapé 低级客户端的目标是实现所有非实验性 API。有时客户端可能会跟踪 Elasticsearch,因此 API 尚未实现,但您是否正在寻找特定的 API?
  • 此时我只需要_reindex API,但我没有注意到LowLevel客户端上允许您放入JSON的方法
【解决方案2】:

如果您使用的是 NEST,则可以使用 Raw 查询。 https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/raw-query-usage.html

允许将表示为 JSON 字符串的查询传递给 NEST Fluent API 或 Object Initializer 语法。这在以下情况下很有用 将查询 DSL 中表达的查询移植到 NEST。

您应该能够执行以下操作:

query.Raw(yourJsonQueryString)

编辑: 如果您正在寻找_reindex,您可以使用重新索引 API。

var reindexResponse = client.ReindexOnServer(r => r
    .Source(s => s
        .Index("old-index")
    )
    .Destination(d => d
        .Index("new-index")
    )
    .WaitForCompletion(true)
);

【讨论】:

  • 据我所知,这仅用于查询(搜索),我正在寻找任何请求,例如仅使用 JSON 执行POST _reindex
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多