[ElasticSearch] 검색엔진 만들기 4 – Flask 웹서비스 elasticsearch에 필요한 데이터는 다 색인해뒀기 때문에 검색엔진 자체는 다 만들어졌고 서비스를 위해서 적당한 UI 만 있으면 될 것 같다. 기존 운영하는 웹페이지에 이식하고자 하는 경우에는 작게 모듈형태로 만들어서 간단한 스크립트로 해당 검색 엔진을 불러오게할 수도 있을 것 같은데 이것만으로 완전한 독립 서비스를 구축하는 것이어서 크게 단계를 나누어서 만들지는 […]
[ElasticSearch] 검색엔진 만들기 3 – Python 검색 모듈 만들기
[ElasticSearch] 검색엔진 만들기 3 – Python 검색 모듈 만들기 IMS 데이터는 앞서 Elasticsearch에 인덱싱 해두었고 이를 검색하는 모듈을 Python API 를 이용해서 만들어본다. Python Flask로 만들면 웹서비스를 직접 할 수도 있고 다른 프레임워크에 이식하기 위한 HTTP API 를 만들어내기도 간편한 것 같다. 쿼리 템플릿 먼저 검색에 사용할 쿼리를 만들어야하는데 kibana dev tools 에서 SQL 툴처럼 […]
[ElasticSearch] 검색엔진 만들기 2 – IMS 데이터 크롤링
[ElasticSearch] 검색엔진 만들기 2 – IMS 데이터 크롤링 Selenium, BeautifulSoup 를 이용해서 IMS 이슈 페이지 Crawler 를 만든다. 기초적인 부분은 [여기]()를 참고. 단위 크롤러 수집할 이슈 번호에 대한 리스트를 만들어 한번에 수집하고 Elasticsearch에 인덱싱 하는 IndexIssueList 함수를 만들었다. (IMS 는 이슈 번호를 URL(https://ims.tmaxsoft.com/tody/ims/issue/issueView.do?issueId=) 에 변수로 대입해서 각 이슈 페이지에 접근할 수 있다.) _LOGIN_ID = "IMS_USERNAME" […]
[ElasticSearch] 검색엔진 만들기 1 – Mac에 ElasticSearch, Kibana 설치
기존에 만들었던 IMS 검색엔진의 아이디어들을 정리하면서 동시에 Mac과 친해질 겸 Mac 환경으로 진행할 예정. 그리고 기존 검색엔진은 ELK 6 버전에서 만들었었는데 7 버전에서 구현해보며 최신 버전 체험도 해보려고 한다. 서버에 있던 소스들을 Mac 로컬 환경으로 내려받아 구동해보려고 했더니 index 만드는 것부터 변경 사항이 있었고, Search API에도 type 구조가 드디어 없어지면서 달라진 부분이 바로 눈에 띄었다. […]
[PySpark] Elasticsearch Index 에서 DataFrame 생성하기
[PySpark] Elasticsearch Index 에서 DataFrame 생성하기 elasticsearch-hadoop connector 를 이용해서 spark dataframe을 생성한다. Spark 설치 spark 다운로드 및 환경설정 필요한 요소만 설치하고자 하는 경우 소스코드를 내려받아서 maven을 이용해 빌드해도 되지만 pre-compiled 바이너리를 이용한다. wget http://mirror.navercorp.com/apache/spark/spark-2.3.2/spark-2.3.2-bin-hadoop2.7.tgz tar -xvzf spark-2.3.2-bin-hadoop2.7.tgz -C /app/spark/. mv /app/spark/spark-2.3.2-bin-hadoop2.7 /app/spark/2.3.2 find /app/spark/2.3.2 -mindepth 1 -maxdepth 1 -type d | xargs -I {} […]
[ElasticSearch] Scroll API
[ElasticSearch] Scroll API elasticsearch에서 기본적인 search API는 한 페이지를 리턴하고나면 search context가 소멸된다. search API에서 from, to 값을 이용해 pagination을 구현한 것은 별개의 쿼리가 매번 수행된 것으로 RDBMS로 치면 cursor가 소멸된 것과 같다. 대량의 데이터를 조회하기 위해서는 다른 방식을 사용해야하는데, Elasticsearch에서 RDBMS의 cursor와 같은 기능을 하는게 Scroll API 이다. 사용 방법 curl을 이용해 간단히 scroll […]
[ElasticSearch] Lucene
Lucene OpenSource 검색 라이브러리로서 하둡 개발자로 잘 알려진 Doug Cutting이 개발했다. Lucene이라는 이름은 그의 아내 middle name 을 따서 지었다고. Lucene은 Levenshtein distance에 기반한 fuzzy search 기능까지 있는 검색 라이브러리로 검색 능력이 뛰어나다고 한다. Lucene-demo http://lucene.apache.org/ apache/lucene/java/7.5.0 위 경로에서 Lucene 최신 라이브러리를 다운로드 받으면 demo/lucene-demo-7.5.0.jar 데모 클래스가 있다. IndexFiles를 이용하면 파일 시스템의 특정 경로 내의 […]
[ElasticSearch] 한글 형태소 분석기 nori
한글 형태소 분석기 nori 소개 설치 elasticsearch-plugin 이용해서 설치. 모든 노드에 설치 되어야하고 설치 이후에는 노드 별 재기동이 필요. elasticsearch-plugin install analysis-nori Analysis 형태소 분석을 적용해보고 싶은 text 에 대해 다음과 같이 analysis 테스트가 가능하다. curl -X GET “$HOSTNAME:9200/_analyze?pretty” -H ‘Content-Type: application/json’ -d’ { “tokenizer”: “nori_tokenizer”, “text”: “뿌리가 깊은 나무는”, “attributes” : [“posType”, “leftPOS”, “rightPOS”, […]
[ElasticSearch] elasticdump
elasticdump elasticsearch에 저장돼 있는 indice 데이터를 json 파일로 내려받거나 다른 elasticsearch cluster에 indexing 할 수 있는 유틸로서 https://github.com/taskrabbit/elasticsearch-dump 에서 project 관리를 하고 있고 다운로드 및 가이드 확인이 가능하다. 설치 의존성 node.js 어플리케이션으로 작성돼 있어 node 필요. 설치 순서 1. source 다운로드 및 압축해제 wget https://github.com/taskrabbit/elasticsearch-dump/archive/master.zip unzip master.zip 2. npm install cd elasticsearch-dump-master npm install export […]
[ElasticSearch] ElasticSearch-Hadoop Connector
ElasticSearch-Hadoop ElasticSearch-Hadoop Connector를 이용하여 ElasticSearch의 실시간 검색 및 분석 기능과 Hadoop의 강력한 데이터 저장 및 처리 기능을 동시에 활용. 기본적으로 ElasticSearch는 Join SQL이 수행되지 않는데 ElasticSearch-Hadoop Connector를 이용하면 DF 를 생성해서 multi index 에 대한 Join SQL을 수행할 수 있을 것 같다. 테스트 해본 데이터 사이즈가 커서 그런지 쿼리 응답을 받지는 못함.. 설치 wget https://artifacts.elastic.co/downloads/elasticsearch-hadoop/elasticsearch-hadoop-6.4.2.zip […]