Skip to content
This repository has been archived by the owner on Oct 14, 2021. It is now read-only.

ElasticSearch와 Kibana의 연동 및 활용 #40

Open
teang1995 opened this issue Oct 1, 2021 · 7 comments
Open

ElasticSearch와 Kibana의 연동 및 활용 #40

teang1995 opened this issue Oct 1, 2021 · 7 comments
Assignees

Comments

@teang1995
Copy link
Member

why?

ElasticSearch를 사용하여 쌓인 데이터들을 시각화해서 보면 좋을텐데..
마침 딸려온 Kibana가 ElasticSearch에서 색인된 데이터를 시각화하고 검색하는데 유용한 툴이라고 한다..

What?

우선 Kibana랑 친해지는 걸 목표로.. 검색과 기본적인 시각화를 시도해본다.

@teang1995
Copy link
Member Author

1. Kibana 이용한 ElasticSearch 데이터 검색

  1. kibana 에 들어가 맨 오른 쪽 Analytics를 클릭.
  2. 좌상단 - 자 3개 그어진 버튼을 클릭한다.
  3. 나오는 메뉴의 가장 아래에 있는 Stack Management를 클릭한다.
  4. 그러면 Management 메뉴를 자세히 볼 수 있게 되는데, 아래로 내리다 보면 맨 아래에서 두 번째 큰 항목인 Kibana의 Index Patterns 를 클릭.
  5. 우상단의 Create index Pattern을 클릭하면 python을 이용해 업로드한 속담, 용례 데이터를 kibana에 추가할 수 있다.
  6. 2~5는 되었으니 다시 1,2를 수행한다.
  7. 이번엔 첫 번째로 보이는 메뉴인 Analytics의 Discover를 클릭한다.
  8. 속담과 용례가 나오는 걸 확인할 수 있다.

스크린샷 2021-10-01 오후 1 34 39

eg : *텐트* 를 검색어로 준 결과이다.

wisdom 을 field로 주어서도 검색할 수 있다.

@teang1995 teang1995 changed the title kibana에서 elasticsearch를 이용해 기록한 데이터 검색 ElasticSearch와 Kibana의 연동 및 활용 Oct 1, 2021
@teang1995
Copy link
Member Author

스크린샷 2021-10-02 오후 5 14 51

우선 간단한 쿼리문을 날리는 데에 성공했다. index를 설정하는 방법은 `GET /wisdom2eg_toyset/_search` 에서 _search 전의 부분에 index name을 넣어주면 된다.

@ArtemisDicoTiar
Copy link
Member

오늘 있었던 문제점

  1. index 생성시에 analyzer를 필드에 설정해줘야하는 데 python api에서는 안된다. 그래서 검색할 때 제대로 되지 않았다. (slop)
PUT /wisdom_test
{
  "settings": {
    "analysis": {
      "analyzer": {
        "nori" : {
          "tokenizer" : "nori_tokenizer"
        }
      }
    }
  },

  "mappings": {
    "properties": {
      "eg": {
        "type": "text",
        "analyzer": "nori"
      },
      "wisdom": {
        "type": "text"
      }
    }
  }
}

이제 검색이 잘된다.

앞으로 할 점

  1. 논문 implement에서 설명힌 부분들 적용해보기
  2. slop, minimum_should_match 등의 파라미터 조사 및 적정 값 찾는 방법 모색.

@teang1995
Copy link
Member Author

image
@eubinecto 님이 알려준 highlight 기능을 사용해보았다.
type, fragment_size, number_of_fragments, fragmenter 등의 인자의 사용 방법을 알아야 한다.

teang1995 added a commit that referenced this issue Oct 3, 2021
@ArtemisDicoTiar
Copy link
Member

TODOs

지금까지 explore_{...}로 실험, 공부 해본 메소드들을 우리의 수집 환경에 맞게 클래스 혹은 스크립트를 짜보자!

@ArtemisDicoTiar
Copy link
Member

ArtemisDicoTiar commented Oct 7, 2021

bulk API

데이터 포메팅 관련 참고 자료

bulk api 실험용 인덱스: general info
bulk api 실험용 데이터: aihub의 일반 상식

@ArtemisDicoTiar
Copy link
Member

ArtemisDicoTiar commented Oct 12, 2021

bulk API 구현 마무리하기

bulk api를 사용할 때 반드시 action으로 {"index": {}}를 인덱싱할 문서 앞에 넣어야한다.
각 데이터와 action은 모두 \n으로 split되어 있어야한다.

# python functional programming
sentences = list(
    reduce(
        lambda i, j: i + j,
        list(map(
            lambda doc:
            list(map(
                lambda sent: '{"index": {}}\n' + json.dumps(
                    {
                        'source': doc['source'],
                        'title': doc['title'],
                        'sent': sent[1],
                        'sent_id': sent[0]
                    }
                ),
                enumerate(doc['sents'])
            )),
            docs
        ))
    )
)

이번에 실험하는 데이터의 볼륨이 커서 bulk를 썼음에도 잘라서 올려야한다.
임의로 10개 덩어리로 잘라줬다.
생각해보니깐 이렇게 전체 데이터에 action을 추가하고 임의로 자르게 되면 마지막 줄이 액션으로 끝날 수도 있다.
미리 데이터를 잘라서 list of list of string을 구축하고 action을 str + str로 추가하게 해야겠다.

sent_total = len(sentences)
for d in range(11):
    r = sent_total//10
    body = sentences[d*r: (d+1)*r]

    es.bulk(index='machine_read', doc_type='_doc', body='\n'.join(body))
    print(f'done: {d}')

ArtemisDicoTiar added a commit that referenced this issue Oct 12, 2021
ArtemisDicoTiar added a commit that referenced this issue Oct 12, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants