pbj0812의 코딩 일기

[빅데이터기술] ElasticSearch, Kibana에서 원하는 단어만 필터링하기 본문

빅데이터/빅데이터기술

[빅데이터기술] ElasticSearch, Kibana에서 원하는 단어만 필터링하기

pbj0812 2020. 12. 25. 18:59

0. 목표

 - ElasticSearch, Kibana에서 원하는 단어만 필터링하기

 - ES, Kinbana 설치 및 실행

1. 데이터 생성

 1) library 호출

from elasticsearch import Elasticsearch
from elasticsearch import helpers

 2) ES 연결

es = Elasticsearch('http://127.0.0.1:9200')
es.info()

 3) 인덱스 생성 함수

def make_index(es, index_name):
    if es.indices.exists(index=index_name):
        es.indices.delete(index=index_name)
        es.indices.create(index=index_name)

 4) 테스트 데이터

index_name = 'filtering'
doc1 = {'word_text': '나는 소년 이다',    'price': 1}
doc2 = {'word_text': '나는 소년이다',    'price': 2}
doc3 = {'word_text': '나는소년이다',    'price': 3}
doc4 = {'word_text': '나는 소녀 다',    'price': 4}
doc5 = {'word_text': '나는 소년 소녀 이다',    'price': 5}
doc6 = {'word_text': '나는 소년소녀이다',    'price': 6}

 5) 인덱스 생성

make_index(es, index_name)

 6) 데이터 삽입

es.index(index=index_name, doc_type='string', body=doc1)
es.index(index=index_name, doc_type='string', body=doc2)
es.index(index=index_name, doc_type='string', body=doc3)
es.index(index=index_name, doc_type='string', body=doc4)
es.index(index=index_name, doc_type='string', body=doc5)
es.index(index=index_name, doc_type='string', body=doc6)

 7) 새로고침

es.indices.refresh(index=index_name)

2. ES 에서 원하는 단어가 있는 결과만 추출

 1) 소년이 들어간 결과 추출

results = es.search(index=index_name, body={'from':0, 'size':100, 'query':{'match':{'word_text':'소년'}}})
for result in results['hits']['hits']:
    print('score:', result['_score'], 'source:', result['_source'])

  - 결과

   - 소년소녀 처럼 다른 단어와 결합되어 있는 것은 제외

score: 0.9517492 source: {'word_text': '나는 소년 이다', 'price': 1}
score: 0.82670164 source: {'word_text': '나는 소년 소녀 이다', 'price': 5}

 2) 소년 소녀가 들어간 결과 추출

results = es.search(index=index_name, body={'from':0, 'size':100, 'query':{'match':{'word_text':'소녀 소년'}}})
for result in results['hits']['hits']:
    print('score:', result['_score'], 'source:', result['_source'])

  - 결과

  - 소년 혹은 소녀가 들어간 결과 추출

score: 1.6534033 source: {'word_text': '나는 소년 소녀 이다', 'price': 5}
score: 0.9517492 source: {'word_text': '나는 소년 이다', 'price': 1}
score: 0.9517492 source: {'word_text': '나는 소녀 다', 'price': 4}

3. Kibana 에서 대쉬보드 생성

 1) Kibana -> Visualize

 2) Create visualization

 3) Lens

 4) word_text.keyword 를 가운데로 드래그하고 그래프 형태를 Data table 로 변경

 5) Add filter -> Field 설정 -> Operator 설정 -> Save

 6) 소년 소녀 -> Enter 키

 7) Save

 8) Kibana -> Dashboard

 9) Add an existing

 10) 원하는 차트 클릭

 11) 완성

Comments