我们正在开发一个应用程序,我们从不同来源和不同格式接收json格式的数据,用户也可以自己添加这些来源,所以我们不知道json格式会有什么属性
我们的应用程序表明,数据到网格格式和网格提供了对该数据的过滤,排序,分页,分组等标准操作。
我们决定使用弹性搜索来存储这样大的非结构化数据。在后端,我们使用.NET(C#)。
开始使用批量API来索引数据。 这是样本json: myJson = @" {""索引"":{"" _index"":"&#34 ; ABC"""" _type"":"" ABC"""&# 34; _id"":1}}, {""名称"":"" ApplicationFrameHost"""" CPU"&#34 ;:1.25,""公司"":空,""产品"":空,""路径"":空} {""指数"" {"" _index"":"" ABC"&# 34;,"" _type"":"" ABC"""" _id"& #34;:2}}, {""名称"":"" audiodg"""" CPU"&#34 ;:1.5625,""公司"":空,""产品"":空,""路径"":空} {""指数"" {"" _index"":"" ABC"&# 34;,"" _type"":"" ABC"""" _id"& #34;:3}}, {""名称"":""计算器"""" CPU"&#34 ;:0.5""公司"":空,""产品"":空,""路径"":空} {""指数"" {"" _index"":"" ABC"&# 34;,"" _type"":"" ABC"""" _id"& #34:4}}, {""名称"":""铬"""" CPU"&#34 ;:144.109375,""公司"":空,""产品"":空,""路径"":空} {""指数"" {"" _index"":"" ABC"&# 34;,"" _type"":"" ABC"""" _id"& #34;:5}}, {""名称"":""铬"""" CPU"&#34 ;:3384.609375,""公司"":空,""产品"":空,""路径"":空}
&#34 ;;
在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。请注意,这可能会占用大量内存。或者,也可以使用关键字字段。
先谢谢。
答案 0 :(得分:0)
使用批量API将数据插入ES是索引数据的不错选择。关于,展示和展示您的数据,您需要更具体地了解您的需求。 ES有一个强大的Aggregation框架,可以为您提供聚合数据和数据。 Analytics(分析)。分享您的用例,以便我们为您提供更好的帮助。