【问题标题】:Elastic Search NEST (.net) SQL弹性搜索 NEST (.net) SQL
【发布时间】:2020-12-10 15:28:49
【问题描述】:

我正在尝试使用https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-sql.html 使用 .net NEST 客户端。有什么想法吗?我真的没有在任何地方看到指南。

【问题讨论】:

    标签: elasticsearch nest


    【解决方案1】:

    您可以通过多种方式编写 SQL 并从 Elasticsearch 返回结果

    使用 ODBC 驱动程序

    Install the ODBC driver 并使用System.Data.Odbc.OdbcConnection 获取记录。例如

    using var connection = new OdbcConnection("DSN=Local Elasticsearch");
    connection.Open();
    
    using var command = connection.CreateCommand();
    command.CommandText = "SELECT * FROM my_index";
    
    using var adapter = new OdbcDataAdapter(command);
    var table = new DataTable();
    adapter.Fill(table);
    connection.Close();
    
    // do something with data in table
    

    注意ODBC driver is a platinum feature which requires a platinum or enterprise license

    使用 SQL API

    使用在 .NET 客户端 NEST 上公开的 Elasticsearch SQL API。一个例子

    var client = new ElasticClient();
    
    var sqlResponse = client.Sql.Query(q => q
        .Query("SELECT * from my_index")
    );
    
    foreach (var c in sqlResponse.Columns)
    {
        // do something with columns 
    }
    foreach (var r in sqlResponse.Rows)
    {
        // do something with rows
    }
    

    SQL API 是默认分发功能的一部分。

    【讨论】:

    • 如何实际阅读一行?我似乎找不到任何文档。
    • @SoftwarePPNV 列和行映射到来自 API 的 JSON 响应:elastic.co/guide/en/elasticsearch/reference/current/….Columns 具有名称和字段类型,可用于确定如何读取 .Rows 中的值,例如如果第一列是text 数据类型,则可以使用r[0].As<string>() 读取每一行中的第一个值,其中r 是枚举.Rows 的当前值,即foreach(var r in response.Rows) { ... }
    • 高级客户端总是希望反序列化来自 JSON 的响应。但是,您可以让 API 返回 CSV 格式,并使用低级客户端以 StringResponse 的形式返回响应,自己处理每个 CSV 行的读取。
    • 有没有办法在 Elasticsearch SQL API 中指定格式为 JSON?
    • 使用 REST API,您可以执行 POST/_sql?format=json 以 JSON 格式返回列和行。我想知道如何使用 NEST API 指定该格式。
    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多