SQL Server 데이터베이스> Logstash> Elasticsearch : 동일한 엔터티와 관련된 결과 집합 레코드를 동일한 ES 문서에 매핑

I. 돔 쉬치 코프

나는 질문에 엔티티 2 개 테이블로 SQL Server 데이터베이스로 표현해야 Questions하고 Answers(아래 참조). 그들 사이의 관계는 OneToMany입니다.

Questions

Id      Title
-------------------
 1      Question 1
 2      Question 2

Answers 표:

Id    Answer        Question_Id
-------------------------------
1     answer 1      1
2     answer 2      1
3     answer 3      1
4     answer 4      2
5     answer 5      2

Logstash 파이프 라인을 통해 데이터를 이동 한 후 아래 제공된 구조의 ES 문서를 얻고 싶습니다.

{
  “questionId": 1,
  "questionTitle": "Question 1",
  "questionAnswers": [
    {
      “answerId": 1,
      "answer": "answer 1"
    },
    {
      "answerId": 2,
      "answer": "answer 2"
    },
    {
      "answerId": 3,
      "answer": "answer 3"
    }
  ]
}

{
  "questionId": 2,
  "questionTitle": "Question 2",
  "questionAnswers": [
    {
      "answerId": 4,
      "answer": "answer 4"
    },
    {
      "answerId": 5,
      "answer": "answer 5"
    }
  ]
}

logstash jdbc 입력 플러그인 설정은 Question_Answers보기를 사용하여 데이터를 검색합니다.

{
  jdbc {
    type => “Test_1”
    jdbc_connection_string => "jdbc:sqlserver://myinstance:1433"
    jdbc_user => “root”
    jdbc_password => “root”
    jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    jdbc_driver_library => "/home/abury/enu/mssql-jdbc-6.2.2.jre8.jar"
    schedule => "*/3 * * * *"
    statement => "SELECT * from Question_Answers"
  }
}

뷰에 의해 반환 된 결과 집합은 다음과 같습니다.

questionId  questionTitle   answerId    answer
1           Question 1      1           answer 1
1           Question 1      2           answer 2
1           Question 1      3           answer 3
2           Question 2      4           answer 4
2           Question 2      5           answer 5

Elasticsearch 출력 플러그인 설정은 다음과 같습니다.

output {
    elasticsearch {
    hosts => "http://localhost:9200"
    index => "question"
    document_id => "%{questionId}"
  }
}

질문 : 동일한 질문과 관련된 레코드를 식별하고 위에 제공된 원하는 구조로 ES 문서를 작성하도록 Logstash를 설정하려면 어떻게해야합니까? 원하는 동작을 얻기 위해 output.conf 파일에 일부 집계 논리를 추가 할 수 있습니까? 또는 각 질문에 대해 단일 레코드를 반환하도록 DB보기를 다시 작성해야합니다.

questionId  questionTitle   answerId    answer
---------------------------------------------------------------------
1           Question 1      1, 2, 3     answer 1, answer 2, answer 3

업데이트 됨 : 열 이름의 오타 수정

I. 돔 쉬치 코프

logstash 집계 필터 플러그인을 사용하여 Elasticsearch 문서의 원하는 구조를 얻을 수있었습니다 ( 예제 4 참조 ).

filter {
    aggregate {
        task_id => "%{questionId}"
        code => "
               map['questionId'] ||= event.get('questionid')
               map['questionTitle'] ||= event.get('questiontitle')
               
               map['questionAnswers'] ||= []
               map['questionAnswers'] << {'answerId' => event.get('answerid'), 'answer' => event.get('answer')}

               event.cancel()
             "
        push_previous_map_as_event => true
        timeout => 3
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관