当前位置: 首页 > 知识库问答 >
问题:

弹性搜索--用弹性C#API处理原始JSON(非结构化数据)

赵俊远
2023-03-14

我们正在开发一个应用程序,在这个应用程序中,我们从不同的源和不同的格式接收json格式的数据,用户也可以将这些源添加到自己的那里,所以我们不知道json格式会有什么属性

我们的应用程序将该数据表示为网格格式,网格提供了对该数据的过滤、排序、分页、分组等标准操作。

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

开始使用大容量API对数据进行索引。下面是示例json:myJson=@“{”“index”:{“_index”:“abc”,“_type”:“abc”,“_id”:1}},{“name”:“applicationframewhost”,“cpu”:1.25,“company”:null,“product”:null,“path”:null}{“index”:{_index“:”abc“,”_type“:”abc“,”_id“:2}},{”name“:”audiodg“,”cpu“:1.5625,”company“:null,”产品“:null,”path“:null}{”index“:{”_index“:”abc“,”_type“:”abc“,”_id“:3}},{”name“:”calculator“,”cpu“:0.5,”company“:null,”product“:null,”path“:null}{”index“:{_index”:“abc”,“_type”:“abc”,“_id”:4}},{“name”:“chrome”,“cpu”:144.109375,“company”:null,“product”:null,“path”: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);

它确实成功地将数据插入到Elastic。

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

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

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

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

共有1个答案

尉迟正奇
2023-03-14

使用bulk API将数据插入到ES中是索引数据的好选择。关于、呈现和展示您的数据,您需要更具体地说明您需要什么。ES有一个强大的聚合框架,为您提供聚合数据和分析。分享您的用例,这样我们可以更好地帮助您。

 类似资料:
  • 很抱歉,但是ES的文档(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index.html)让我感到困惑。 多亏了术语表,我理解了数据库、表和行的术语,但我阅读了文档的大部分部分,但我找不到答案: 为什么需要在索引创建中添加和?我确实在这里查看了http://www.elasticsearch.org/g

  • 我使用的是spring data elasticsearch,当我使用@query注释时,将代码与实际的JSON elasticsearch查询关联起来要容易得多,如本链接参考中的示例所示: https://www.programcreek.com/java-api-examples/index.php?api=org.springframework.data.elasticsearch.anno

  • 当我执行ps-aef grep elasticsearch HeapDumpOnOutOfMemoryError时看到了这一点 501 373 47 1 0 2:29pm ttys004 0:04.14/usr/bin/Java-xms4g-xmx4g-xss256k-djava.awt.headless=true-xx:+useparnewgc-xx:+useparnewgc-xx:+usepa

  • 我从ElasticSearch得到以下错误。 我在Ubuntu上运行Elasticsearch 1.7.2。 我做错了什么?

  • 我使用的是spring数据elasticsearch(4.0版)。现在,我需要将rest高级客户端的搜索结果转换为POJO对象。 我会使用杰克逊图书馆的ObjectMapper。我相信有更好的方法来做到这一点。 Spring data elasticsearch now(4.0版)使用MappingElasticsearchConverter。不幸的是,我不知道如何做到这一点-我没有看到任何相关文

  • 我有一个问题,在elasticsearch与mongob建立河流。如果日期的大小在一百万以内,我可以从mongob导入数据。但是当数据很大1000万或更大时,河流无法索引来自mongob集合的所有记录。 我在日志中看到这个错误 通常说river stale是错误的几次。此外,我在mongodb设置中的oplog大小为1024MB。