【问题标题】:Elastic Search - Raw JSON ( unstructured data ) handling with elastic C# APIElastic Search - 使用弹性 C# API 处理原始 JSON(非结构化数据)
【发布时间】:2018-04-09 20:14:10
【问题描述】:

我们正在开发一个应用程序,我们从不同来源和不同格式接收 json 格式的数据,用户也可以在其中添加这些来源,所以我们不知道 json 格式会有哪些属性

我们的应用程序将该数据呈现为网格格式,并且网格提供对该数据的过滤、排序、分页、分组等类型的标准操作。

我们决定使用弹性搜索来存储如此庞大的非结构化数据。在后端,我们使用 .NET (C#)。

开始使用批量 API 来索引数据。 这是示例json: myJson = @"{""index"":{""_index"":""abc"",""_type"":""abc"",""_id"":1}}, {""Name"":""ApplicationFrameHost"",""CPU"":1.25,""Company"":null,""Product"":null,""Path"":null} {""index"":{""_index"":""abc"",""_type"":""abc"",""_id"":2}}, {""名称"":""audiodg"",""CPU"":1.5625,""公司"":null,""产品"":null,""路径"":null} {""index"":{""_index"":""abc"",""_type"":""abc"",""_id"":3}}, {""名称"":""计算器"","CPU"":0.5,""公司"":null,""产品"":null,""路径"":null} {""index"":{""_index"":""abc"",""_type"":""abc"",""_id"":4}}, {""名称"":""chrome"",""CPU"":144.109375,""公司"":null,""产品"":null,""路径"":null} {""index"":{""_index"":""abc"",""_type"":""abc"",""_id"":5}}, {""Name"":""chrome"",""CPU"":3384.609375,""Company"":null,""Product"":null,""Path"":null}

";

在 C# 代码方面:

 var connectionSettings = new ConnectionSettings(new Uri("http://localhost:9200/"));
    connectionSettings.DisableDirectStreaming(true);
    var client2 = new ElasticClient(connectionSettings);

var jsonPostData = new PostData<object>(myJson);
    var bulkRequestParameters = new BulkRequestParameters
    {

    };

    Func<BulkRequestParameters, BulkRequestParameters> convert = delegate (BulkRequestParameters s)
    {
        s.ErrorTrace(true);
        return s.Refresh(Refresh.True);
    };

    ElasticsearchResponse<VoidResponse> response = client2.LowLevel.Bulk<VoidResponse>("abc", "abc", jsonPostData, convert);

它确实成功地将数据插入到弹性中。

只是想确认这是执行此操作的最佳方式吗?

我们面临的问题 我们需要对索引数据的任何字段进行分组(用户可以在呈现数据时对任何字段进行分组,因此我们需要在运行时聚合数据。 如何使用 C# API 实现这一点?

另外,如何使用 C# API 对多个字段进行过滤?

我是弹性搜索的新手,所以不太了解它有哪些功能以及使用 C# API 实现此目的的方法是什么,尽管我在 Kibana 控制台上玩过一些分组,但我收到以下错误: 默认情况下,在文本字段上禁用 Fielddata。在 [Name] 上设置 fielddata=true,以便通过反转倒排索引将 fielddata 加载到内存中。请注意,这可能会占用大量内存。或者使用关键字字段。

【问题讨论】:

    标签: c# elasticsearch


    【解决方案1】:

    使用批量 API 将数据插入 ES 是索引数据的好选择。关于、呈现和展示您的数据,您需要更具体地了解您的需求。 ES 有一个强大的Aggregation 框架为您提供聚合数据和分析。分享您的用例,以便我们更好地帮助您。

    【讨论】:

    • 我们从 elastic 中查看了聚合,但我们的理解是它需要预定义的字段来执行聚合,但对我们来说,聚合字段是动态的(从 UI 用户可以对任何字段执行分组和排序)。我们的文档包含40-60 个字段,那么如果对每个字段执行聚合是否正确?我们也在研究 fielddata=true 但在每个字段上使其成为 true 是正确的,我认为它还需要知道确切的数据类型( text、int、date、bool )才能应用映射,但由于数据的非结构化性质,它是未知或我们从数据集中猜测。
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2020-10-17
    • 2022-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多