C#(.net)으로 엘라스틱서치에 json data를 insert하는 방법을 알고싶습니다

엘라스틱서치에 json 데이터를 삽입하려고하는데 문제가 있어 질문드립니다.
저는 아래의 python으로 작성된 코드와 동일한 c# 코드를 작성하려고합니다.
하지만 c#에서는 결과 사진과 같이 value의 자료형을 string으로 선언하였기 때문에
줄바꿈 문자가 포함되어 저장이 됩니다. 줄바꿈 문자가 포함되지 않도록하려면 어떻게해야하나요?

me.json 파일은 임시로 사용중인 파일이고 실제로 넣으려는 데이터는 굉장히 방대하고 복잡합니다.

python 코드입니다.

    import json
    import time

    from elasticsearch import Elasticsearch
    from elasticsearch.helpers import bulk

    ES_ENDPOINT = "http://id:password@ip주소:9200"
    es = Elasticsearch(ES_ENDPOINT, timeout=300, max_retries=10, retry_on_timeout=True)

    def gendata():

        file = open('me.json')
        jsonString = json.load(file)

        keys = [
            key for key in jsonString
        ]

        print(keys)

        x = range(len(keys))

        start = time.time()

        i = 0

        for i in x:
            jsonArray = jsonString.get(keys[i])

            for list in jsonArray:
                yield {
                    "_index": "jsoninsert_python2",
                    "_source": {
                        keys[i] : list
                    }
                }

            i = i + 1

        print("시간: {}초".format(time.time() - start))

    bulk(es, gendata())

    gendata()

실행 결과 사진입니다.

python으로 했을때

c# 코드입니다.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Elasticsearch.Net;
using Nest;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace jsonParsing
{
    class Program
    {
        public class IotDatabase
        {
            public string siteID { get; set; }
            public string bimID { get; set; }
            public string K { get; set; }
            public string V { get; set; }
        }

        static void Main(string[] args)
        {

            // 엘라스틱서치 연동
            var defaultIndex = "jsoninsert_c4";
            var pool = new SingleNodeConnectionPool(new Uri("http://id:password@ip주소:9200"));
            var settings = new ConnectionSettings(pool)
                .DefaultIndex(defaultIndex);
            var client = new ElasticClient(settings);

            // json 파싱
            String path = @"C:\Users\me.json";
            JObject obj = JObject.Parse(File.ReadAllText(path));

            // list 선언
            var list = new List<IotDatabase>();

            // 키 추출
            IList<string> keys = obj.Properties().Select(p => p.Name).ToList();

            var c = keys.Count();

            for (var i = 0; i < c; i++)
            {

                string k = keys[i];
                JToken v = (JToken)obj[keys[i]];
                JArray v1 = (JArray)v;

                foreach (var x in v1)
                {
                    var iotDatabase = new IotDatabase { 
                        //siteID = "DTAAS",
                        //bimID = "TestBIM",
                        K = k, 
                        V = x.ToString() 
                    };

                    list.Add(iotDatabase);
                }
            }


            // bulk 삽입
            var bulkAllObservable = client.BulkAll(list, b => b
                .Index("jsoninsert_c4")
                .BackOffTime("30s") // 재시도 간의 대기시간
                .BackOffRetries(2)
                .Size(100000) // 대량 요청 당 항목?
            )
            .Wait(TimeSpan.FromMinutes(15), next =>
            {
            });

            Console.ReadLine();

        }
    }
}

실행 결과 사진입니다.

c#으로 했을때_줄바꿈 문자 포함안되게 저장하고싶음.

me.json 파일입니다.

{
   "test1": [
      {
         "id": 1,
         "x": 1,
         "y": 1
      },
      {
         "id": 3,
         "x": 3,
         "y": 3
      }
    ],
     "test2": [
      {
         "id": 2,
         "x": 2,
         "y": 2
      }
   ]
}

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.