Elasictsearch With 은전한닢 for Windows



옛날 버전의 게시글입니다.
최신 버전의 elasticsearch 에서는 nori 라는 한국어 형태소 분석기를 자체적으로 내장하고 있어 아래와 같이 복잡하게 설치하지 않아도 됩니다.

docker 기반으로 설치하는 게시글은 제가 추가로 정리했습니다.

아래 게시글에서 확인 가능합니다.
https://sooyeol86.blogspot.com/2019/12/elasticsearch-with-nori-feat-docker.html

docker를 사용하고 싶지 않은 분은 최신버전의 elasticsearch 를 받아서 직접 설치하시고
nori 플러그인만 인스톨 하면 간단하게 설치가 끝납니다. (엄청 쉽습니다!)

bin/elasticsearch-plugin install analysis-nori 
요고 한줄이면 설치가 됩니다.


아래 공식사이트 참고)
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-nori.html


추가로 nori + 사용자사전 + 유의어사전 + 품사에 대한 간략한 설명한 게시글도 작성했습니다.
품사에 대해서 참고하시면 검색엔진 구축 시 조금이나마 도움이 될 수 있을 것 같습니다.
https://sooyeol86.blogspot.com/2019/12/elasticsearch-nori.html


==============================================================================



ElasticSearch를 처음 접한 건 2013년 경에 회사 프로젝트를 진행하며 형태소분석기를 사용해야 할 일이 있어서 접하게 되었다.
당시는 Elasticsearch를 검색엔진으로 사용하지 않고, 은전한닢 만 형태소 분석하는 목적으로 사용을 해봤다.

그리고 해당 경험을 바탕으로 2016년에 Elastichsearch를 사용하여 검색엔진을 구축했다.
하지만 당시에는 윈도우에서 최신버전의 은전한닢을 사용할 수 없어 상당히 낮은 버전의 Elastichsearch (0.9버전) 으로 구축을 했다.

, 시간이 흘러 2017년에 Elasitchsearch를 사용하여 새로 검색엔진을 구축할 일이 있었고,
검색을 해보니 친절하신 분께서 윈도우에서도 손쉽게 은전한닢을 쓸 수 있도록 빌드를 해주셨다.

나는 추 후 참고를 위해 해당 내용을 간략하게 정리를 해볼 생각으로 글을 작성해 둔다.


# 준비물
           Elastichsearch (검색엔진) : x64 v5.5.0
           은전한닢 플러그인 (형태소분석기) : v5.5.0
           Mecab-ko / mecab-ko-dic / mecab-java
           JDK : x64 1.8 144


# 설치 및 테스트
01.   JDK 설치
A.     JDK 1.8 x64 144 버전으로 구축 진행.
02.   JAVA_HOME 설정
A.     시스템 > 고급시스템 설정 > 환경변수 에 JAVA_HOME 생성
03.   환경변수에 PATH 설정
A.     Java 경로 설정
04.   Mecab 다운로드
B.      mecab-ko-msvc 다운로드
C.      mecab-ko-dic-msvc 다운로드
D.     mecab-java-msvc 다운로드
05.   mecab 설치 및 테스트
A.     다운로드 받은 파일을 c:\mecab 폴더에 압축 해제
* 해당 폴더에 압축 해제 하지 않을 경우 Elastchsearch 와 제대로 연동이 안될 수 있음. (github 참고)
B.      Mecab 폴더 path 설정
                         i.         환경변수에서 path 설정
C.      CMD 창을 열어서 test.java 파일 빌드 (반드시 encoding UTF-8로 해야함)
Javac encoding UTF-8 test.java
D.     빌드한 파일 실행
Java test
06.   Elasticsearch 다운로드
A.     Elasticsearch 5.5.0 버전 사용
07.   Elasticsearch 설치
A.     C:\Elastichsearch 폴더에 받은 파일 압축 해제
B.      C:\Elastichsearch\config\ elasticsearch.yml 에 설정
                         i.         쿼리 조건 길이를 확장하고 싶은 경우 아래 코드 추가
                        ii.         indices.query.bool.max_clause_count : 10240
08.   은전한닢 플러그인 설치
A.     CMD 창 열어서 아래 명령어 실행
정상적으로 설치 되면 아래와 같이 폴더가 생김.
09.   Elastichsearch 서비스 등록
A.     elasticsearch-service install
10.   Elastichsearch 서비스 환경설정
A.     시작 옵션 설정
B.      자바 가상 메모리 조절 (필요한 경우)
11.   Elastichsearch 서비스 시작
초기 서비스 등록 후 자동시작이 되어 있지 않기 때문에, 수동으로 시작을 해줘야 함.
위의 옵션으로 자동 시작하게 하면 재부팅 후 부터는 자동으로 시작하게 됨.
12.   Elastichsearch 실행 및 은전한닢 형태소 분석기 정상 동작 확인
A.     Elasticsearch 동작 확인
GET 으로 http://localhost:9200 페이지 호출
B.      Index 생성
PUT 으로 http://localhost:9200/test/ 호출
##호출하는 JSON 본문##

{
 "settings":
 {
  "index": {
   "max_result_window" : 500000,
   "analysis": {
    "analyzer": {
     "korean_index": {
      "type": "custom",
      "tokenizer": "mecab_ko_standard_tokenizer"
     },
     "korean_query":
     {
      "type": "custom",
      "tokenizer": "korean_query_tokenizer"
     }
    },
    "tokenizer": {
     "mecab_ko_standard_tokenizer": {
      "type": "mecab_ko_standard_tokenizer",
      "mecab_args": "-d C:/mecab/mecab-ko-dic"
     },
     "korean_query_tokenizer": {
      "type": "mecab_ko_standard_tokenizer",
      "compound_noun_min_length": 100,
      "mecab_args": "-d C:/mecab/mecab-ko-dic"
     }
    }
   }
  }
 }


}

C.      형태소 분석 요청
POST http://localhost:9200/test/_analyze?analyzer=korean_query 페이지 호출
##결과 JSON##

{

 "tokens": [
  {
   "token": "은전",
   "start_offset": 0,
   "end_offset": 2,
   "type": "NNG",
   "position": 0
  },
  {
   "token": "한",
   "start_offset": 2,
   "end_offset": 3,
   "type": "NR",
   "position": 1
  },
  {
   "token": "닢",
   "start_offset": 3,
   "end_offset": 4,
   "type": "NNG",
   "position": 2
  },
  {
   "token": "프로젝트",
   "start_offset": 4,
   "end_offset": 8,
   "type": "NNG",
   "position": 3
  }
 ],
}


댓글 15개:

  1. 안녕하세요.. 글을보고 설치후 확인중에 마지막 단계(C 형태소 분석) 에서 에러가 나서 문의 드립니다.

    마지막에 "은전한닢프로젝트" 호출하면 elasticsearch 서비스가 죽는데, 로그를 보면 아래 처럼 나옵니다.

    java.lang.UnsatisfiedLinkError: Cannot load the native code.
    Make sure your LD_LIBRARY_PATH contains MeCab.so path.
    java.lang.UnsatisfiedLinkError: no MeCab in java.library.path

    mecab는 C:\mecab 에 디렉토리 구성하고 아래와 같이 라이브러리 폴더 생성되어 있습니다.
    mecab-java-msvc-x64
    mecab-ko-dic-msvc
    mecab-ko-msvc-x64

    제가 뭔가 놓친게 있는걸까요?

    답글삭제
    답글
    1. 제 생각에는 mecab 라이브러리를 못 찾아가서 생긴 문제 같은데, 혹시 환경 변수에는 잡으셨나요?
      예전에 mecab 라이브러리를 못 찾았을 때 해당 오류 같은 걸 저도 봤던 기억은 있는데... 잘 기억이 안나네요..

      그리고, 엘라스틱서치 최신 버전에는 누리라는 형태소분석기가 추가되어 있습니다.
      최신 버전을 사용해보시는게 더 좋을 것 같기는 합니다.
      저도 아직 설치는 못해봤는데 엘락스틱에서 제공해주는 것이기 때문에 은전한닢 설정보단 더 편하지 않을까 생각합니다.

      삭제
    2. 예전에 저도 저런 것 있어서 질문을 올렸었네요.
      일단 재배포 패키지 깔면 되기는 했었는데, 제 기억에 의하면 만들어주셨던 분이 재배포패키지 포함하여 다시 빌드해주신걸로 기억하는데.. 여기 글을 적을 때 어떤걸로 했는지 기억이 안나네요..

      https://groups.google.com/forum/#!topic/eunjeon/Dzohqj4n3QI

      삭제
    3. 링크가 제대로 안걸리는 것 같아, 해당 글 에 달았던 내용 추가로 남겨놓습니다.

      ========================================================================================================================

      이것 저것 해보다가 자문 자답하게 되네요.

      VS2015 재배포 패키지가 설치 되 있지 않아 발생한 문제 같습니다. (vcruntime140dll 없음)

      아래 링크에서 재배포패키지 설치하니 정상 동작하네요!
      https://www.microsoft.com/ko-kr/download/confirmation.aspx?id=48145

      아직 ElasticSearch에서는 테스트 하지는 못해봤지만 일단 test 코드는 실행이 되네요.
      감사합니다! 잘 사용하겠습니다.


      PS.
      빌드를 어떻게 해야할지 몰라서 직접 빌드는 못해봤는데,
      예전에 VS2013에서 C++ 빌드 했을때 기억으로는 재배포 패키지 없이 빌드 할 수 있는 옵션이 있었던 것 같습니다.
      해당 옵션으로 빌드를 해둘 경우 재배포 패키지 없이 사용가능하지 않을까 싶습니다. (http://giyatto.tistory.com/41)

      삭제
  2. 위 문의글 남긴 사람입니다.
    c:\mecab 디렉토리에 3개 zip 파일안의 모든 파일을 옮겨놨어야 했던거네요..
    잘 해결되었습니다.
    설명글때문에 쉽게 설치 할수 있었습니다. 감사합니다. ^^

    답글삭제
    답글
    1. 아, 제 설명이 살작 부족했었나보네요. 성공하셨다니 다행이시네요!

      삭제
  3. 안녕하세요? 글 정말 감사하게도 잘 봤습니다.
    모든 걸 잘 따라 가다가 마지막에 elasticsearch를 실행하는 과정에서, 시스템으로 들어가서 시작을 눌러도 시작이 됐다고만 하지 창이 뜨지가 않고, cmd로 시작을 시켜도 시작만 돼고 다른 창이 안 떠서 답답한 상태입니다. 제가 뭘 놓치고 있는 걸까요? ㅠㅠ

    답글삭제
    답글
    1. 서비스를 실행하신 것이라면 백그라운드로만 실행됩니다. localgost:9200을 브라우저나 rest 유틸로 실행해서 json이 리턴되면 정상적으로 가동 된 것입니다.
      저는 크롬 확장 rest앱을 사용했습니다.

      삭제
  4. 안녕하세요! 자세한 설치 방법 감사합니다.
    크롬 rest 유틸로 실행해서 테스트 하던 중 put과 post에 400Bad Request라고 오류가 뜨네요ㅜ
    json이 리턴이 안되는데 어떤 오류가 있는 걸까요?

    답글삭제
    답글
    1. 저도 정확하게는 모르겠는데 get 은 되셨나요? 요즘 버전은 한글 형태소 분석기 포함하고 있어서 살치가 더 쉬울건데.. 요즘 버전으로 한번 찾아서해보세요!

      삭제
  5. 호출하는 JSON 본문을 그래도 복붙하면 되나요?ㅠ 저는 왜 안되죠ㅜ
    아래와 같은 에러가 뜹니다ㅜ
    {
    "error": {
    "root_cause": [
    {
    "type": "index_already_exists_exception",
    "reason": "index [test/y-p_JIeuTHeNJLxeCSIZrg] already exists",
    "index_uuid": "y-p_JIeuTHeNJLxeCSIZrg",
    "index": "test"
    }
    ],
    "type": "index_already_exists_exception",
    "reason": "index [test/y-p_JIeuTHeNJLxeCSIZrg] already exists",
    "index_uuid": "y-p_JIeuTHeNJLxeCSIZrg",
    "index": "test"
    },
    "status": 400
    }

    답글삭제
    답글
    1. 저도 오래되서 기억이 가물하네요.

      요즘버전은 설치가 좀더 쉬울 것 같은데 한번 최신 버전으로 찾아서 해보세요.

      저기 있는 json 내용을 보면 이미 인덱스가 생성된듯하네요.
      delete를 한번 호출 하고 다시 put을 해보세요.

      삭제
  6. 12번부터는 어디서 하는 건지 모르겠어요. 답답한 학생을 위해 알려주세요. 11번까지는 아주 잘 되었습니다.

    답글삭제
    답글
    1. 안녕하세요. 크롬 확장 프로그램을 이용하여 rest api 확인했습니다.
      크롬에서 아래 url 접속하여 설치하시면 사용가능하십니다.

      https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?hl=ko-KR

      삭제
  7. 저는 5번에서 계속 안되는데 왜 이런지 아시나요? 하 너무 답답하네요 mecab 아나콘다에서 쓰려고 이틀을 쓰고 있는데
    test.java:1: error: package org.chasen.mecab does not exist
    import org.chasen.mecab.MeCab;
    ^
    test.java:2: error: package org.chasen.mecab does not exist
    import org.chasen.mecab.Tagger;
    ^
    test.java:3: error: package org.chasen.mecab does not exist
    import org.chasen.mecab.Model;
    ^
    test.java:4: error: package org.chasen.mecab does not exist
    import org.chasen.mecab.Lattice;
    ^
    test.java:5: error: package org.chasen.mecab does not exist
    import org.chasen.mecab.Node;

    답글삭제

간단한 AWS 웹 서버 구축 with mongodb (feat. Github and Docker)

오랫만에 블로그에 게시글을 업데이트 해봅니다. 최근에 AWS 로 서버 구축하는 것을 테스트 해본 것이 있어서, 이번 게시글에서는 AWS 를 사용하여 간단하게 웹 서버 구축하는 것을 진행하려고 합니다. AWS EC2 서버 프리티어 버전으로 1대 발급 받...