"초급개발자"
40
2021-04-02 10:37:06
2
115

elasticsearch rest api로 bulk insert 질문입니다ㅠㅠ


안녕하세요 

엘라스틱서치를 rest api를 이용해서 bulk insert를 실행중입니다만 잘 안되서 질문남깁니다 ㅠㅠ

현재 저는 c# 유니티3d를 사용하고 있는데요  NEST라이브러리를 사용하려했지만 네임스페이스를 찾을 수 없다고 계속 오류가나서 ..일반 .net은 되는걸 확인했는데 유니티에서는 안되더라구요 그래서 날코딩(?)을 하는 중입니다 약 1억개의 데이터를 대량으로 넣어야해서 하나의 데이터를 LIST<>에 담아서 보내려는데 오류가 생깁니다 ㅠㅠ 도와주세요 


while ((line = file.ReadLine()) != null)

            {

                stopwatch.Start(); // 시간측정 시작

                string pk = Guid.NewGuid().ToString("N");


                string[] first = line.Split('\x020');


                filenum++;

                //여기가 보내는 데이터 입니다 하나씩 넣을때는 정상으로 insert됩니다!

                sample = "{\"index\":{ \"_type\":\"_doc\",\"_id\":" + "\"" + pk + "\"}}" + "\n"

                               + "{ \"x\":" + first[0] + ",\"y\":" + first[1] + ",\"z\":" + first[2] + "}" + "\n";

                data1.Add(sample);

            }

            var chjson = JsonConvert.SerializeObject(data1);//파싱안하면 파싱하라고 오류가 나서 ㅠㅠ

            UnityEngine.Debug.Log(chjson);

            var data2 = new StringContent(chjson + Environment.NewLine, Encoding.UTF8, "application/json");


            using (HttpResponseMessage response = await client.PutAsync(Url, data2))

            {

                result = response.Content.ReadAsStringAsync().Result;

                UnityEngine.Debug.Log(response.StatusCode);

                UnityEngine.Debug.Log(result.ToString());

            }


이렇게 하면 오류는 이런 메시지를 받는데 처음보는 오류라 잘 모르겠습니다 ..


{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Malformed action/metadata line [1], expected START_OBJECT but found [START_ARRAY]"}],"type":"illegal_argument_exception","reason":"Malformed action/metadata line [1], expected START_OBJECT but found [START_ARRAY]"},"status":400}



0
  • 답변 2

  • L군
    190
    2021-04-02 10:44:56 작성 2021-04-02 10:49:11 수정됨

    expected START_OBJECT but found [START_ARRAY]

    { } 이 데이터가 들어올줄 알았는데

    [ ] 이 데이터가 들어왔다고 하네요.


    아래는 엘라스틱서치에서 제공하는 테스트용 데이터 파일인데

    {"index":{"_id":"1"}}
    {"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}

    bulkinsert는 array타입의 json이 아니라 행으로 구분되는거 같아요.


    Lowlevel api인 Elasticsearch.NET 시도해보는거 어떠세요

  • "초급개발자"
    40
    2021-04-02 11:06:42

    답글 감사합니다.

    말씀하신 elasticsearch.net를 사용하려했는데 공홈에 예제로 올라와있는 코드를 실행하려면 NEST도 같이 설치하라고 떠서요 ㅠㅠ


    Assets\Script\DB\BulkScript.cs(10,7): error CS0246: The type or namespace name 'Nest' could not be found (are you missing a using directive or an assembly reference?)

    이런 오류가 계속 생기는 중입니다... ㅠㅠ

    수정합니다 하위버전 코드를 찾아서 실행한 결과 이렇습니다... ㅠㅠ
  • 로그인을 하시면 답변을 등록할 수 있습니다.