이전 글(Ubuntu에 Solr 최신버전 설치)에서 설치까지만 다루고, 실제 사용하기 위한 설정들을 두번째 글에 다룰 예정이었는데, 생각보다 포스팅이 늦어졌다. 하지만, 아직도 한글 분석기 Arirang Analyzer 1.1.2 이후로 개선 소식이 없어, Solr 4.7.0 까지 나온 현재에도 4.5.X 까지만 사용할 수 있는 문제는 여전하기 때문에 아직 유용할 것이라 생각해서 정리해본다.

이전 글에서는 Solr 4.5.0만 언급했지만, 4.5.1에서도 Arirang Analyzer는 잘 동작하므로 한글 분석기를 사용하기 위해서는 Solr 4.5.1을 설치하면 된다. 과거 버전이라 Solr 공식 웹사이트에서는 배포하지 않지만, 아파치 아카이브 사이트에서 다운로드 받을 수 있으며 설치 과정은 이전 글에서 소개한 것과 동일하다. (아카이브 사이트라서 그런지 조금 느리다)

1. 코어 설정

이전 글대로 설치했다면, /usr/local/share/solr 디렉토리는 아래와 같이 구성되어 있을 것이다.

$ cd /usr/local/share/solr
$ ls -F
bin/  collection1/  README.txt  solr.xml  zoo.cfg

저기에서 collection1 이라고 되어있는 것이 코어이다. 여러개의 코어를 설정할 수 있는데, collection1을 복사하거나 이름을 바꿔서 사용할 코어를 만들자. 여기서는 'collection2'라고 이름을 바꿔서 진행해본다.

$ sudo mv collection1 collection2

설치할때 소유자 변환을 해두었기때문에 root로 작업 중이 아니라면, 항상 sudo를 붙여서 작업해야하는 것에 유의한다.

이제 collection2 디렉토리를 보면 여러개의 파일이 있는데, 당장 사용하기 위해서 수정해야할 파일은 딱 다음 세 개이다.

  • core.properties
  • conf/solrconfig.xml
  • conf/schema.xml

먼저 core.properties 파일을 보면 딱 한 줄이 있는데, 내용을 보면 뭘 고쳐야할 지 바로 감이 올 것이다. 다음과 같이 새로 만든 코어 이름을 적어준다.

name=collection2

다음으로 conf/schema.xml 파일은 인덱스에 저장할 스키마 설정이 있다. 주석을 보면 어떻게 작성해야하는지 감이 올텐데, 중요한 것은 field와 fieldType 이다. <fields> 안에 있는 <field> 태그들이 인덱스에 저장할 스키마들인데, 주석을 보면서 필요한 것들을 설정하면 된다. <types> 안에 있는 <fieldType>은 어떤 field가 있을 수 있는지 형식을 지정할 수 있는데, 한글 검색을 위해서 추가한 Arirang Analyzer를 사용하기 위해서 새로운 형식을 만들 필요가 있다.

<types> 안의 적당한 곳에 아래 내용을 넣으면, text_ko 라는 형식 사용할 수 있다.

    <!-- Korean (Arirang Analyzer 1.1.2) -->
    <fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
            <tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
            <filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="false" hasCNoun="true"  bigrammable="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.EnglishPossessiveFilterFactory"/>
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
        <analyzer type="query">
            <tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
            <filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="false" hasCNoun="false"  bigrammable="false" queryMode="true"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
            <filter class="solr.EnglishPossessiveFilterFactory"/>
            <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
            <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
    </fieldType>

conf/solrconfig.xml 파일에는 코어 설정들이 있는데, 바로 사용해보기 위해서는 라이브러리 경로 설정들을 바꿔줘야한다. 나머지 설정들은 천천히 주석을 살펴보고 고치도록 한다. 당장 수정해야할 경로 설정들은 아래와 같다.

  <lib dir="../../../contrib/extraction/lib" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-cell-\d.*\.jar" />

  <lib dir="../../../contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-clustering-\d.*\.jar" />

  <lib dir="../../../contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-langid-\d.*\.jar" />

  <lib dir="../../../contrib/velocity/lib" regex=".*\.jar" />
  <lib dir="../../../dist/" regex="solr-velocity-\d.*\.jar" />

위의 설정에서 경로들을 아래와 같이 고친다.

  <lib dir="../contrib/extraction/lib" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-cell-\d.*\.jar" />

  <lib dir="../contrib/clustering/lib/" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-clustering-\d.*\.jar" />

  <lib dir="../contrib/langid/lib/" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-langid-\d.*\.jar" />

  <lib dir="../contrib/velocity/lib" regex=".*\.jar" />
  <lib dir="../dist/" regex="solr-velocity-\d.*\.jar" />

여기서는 다른 설정이 필요없지만, conf/schema.xml 파일에서 스키마가 수정되면, conf/solrconfing.xml 파일을 수정해야할 수도 있다.

2. 라이브러리 복사

conf/solrconfig.xml 에서 변경한 라이브러리 경로대로 라이브러리를 복사하자. 이전 글에서 했듯이 solr를 다운로드 받아서 압축을 푼 디렉토리에서 복사한다.

$ cd solr-4.X.X (solr 압축 푼 디렉토리)
$ sudo cp -a contrib /usr/local/share/solr/
$ sudo cp -a dist /usr/local/share/solr/

3. 인덱싱

설정이 끝났으니 이제 인덱싱을 해볼 순서이다. 그 전에 먼저 설정들이 바뀌었으니 jetty 재시작부터 하자.

$ sudo service jetty restart

여기에서는 간단히 동작하는 것만 확인하기위해서 Solr 튜토리얼에 있는 방식으로 example 코드와 데이터를 사용해본다. 아까 사용한 solr 압축 푼 디렉토리 밑에 example/exampledocs 라는 디렉토리가 있을텐데 거기로 이동하면, 간단히 인덱싱을 해볼 수 있다.

$ cd solr-4.X.X (solr 압축 푼 디렉토리)
$ cd example/exampledocs
$ java -Durl=http://localhost:8080/solr/collection2/update  -jar post.jar solr.xml

4. 확인

인덱싱이 잘 되었는지는 다음 URL로 접근해서 확인할 수 있다.

http://localhost:8080/solr/collection2/select?q=solr

또는, 다음 URL로 확인해볼 수 있다.

http://localhost:8080/solr/collection2/browse

여기까지 했으면 기본적인 설치/설정은 해본 것이지만, 사실 한글 분석기는 사용하지 않았고, 실제로 사용해보려면 사용할 데이터에 알맞는 스키마를 설정해야한다. 이것은 (기약은 없지만) 다음 글에서 다뤄보겠다.

우분투에서 Solr를 사용해보려고 했더니 12.04 LTS 버전에 있는 패키지는 1.4.0 이었다. 우분투 최신버전이라고 해도 3.6.2라서 현재 Solr 최신버전인 4.6.0과는 차이가 있었다. 하다못해 마이너 버전 차이정도는 좀 눈감아주겠는데, 이건 좀 심하다 싶다.

어쨌든 저런 이유로 최신버전을 직접 설치했고, 그 과정을 한번 정리해보았다.

  1. Solr 최신 버전(현재 4.6.0) 다운로드
  2. 패키지 준비
  3. jetty 설치/설정
  4. 서비스 시작

1. Solr 최신 버전 다운로드

Solr 공식 페이지에서 다운로드 한다. solr-4.6.0.tgz 파일을 받으면된다.

2. 패키지 준비

배포본에 있는 war파일을 기본으로 필요한 것들을 조금 추가한다.

  1. solr-4.6.0.tgz 압축 해제

    cd solr-4.6.0/dist/ mkdir temp cp solr-4.6.0.war temp/ cd temp jar xf solr-4.6.0.war
    rm solr-4.6.0.war


  2. 필요한 파일 추가
    필요한 라이브러리들을 위에서 war 파일 압축을 푼 WEB-INF/lib/ 에 추가한다.
    내가 추가한 것은 한글분석기인 Arirang Analyzer(현재 루씬 한글분석기 커뮤니티에서 받을 수 있음. 네이버 카페 가입 필요)와 Solr를 동작시기키위해서 필요한 것들이다.
    (위에 이어서)
    cp ../../example/lib/ext/* ./WEB-INF/lib/ cp arirang.jar ./WEB-INF/lib/
  3. 재압축

    jar cf ../solr.war *

3. jetty 설치/설정

  1. 설치

    (계속 이어서)
    sudo apt-get install jetty
    cd ../.. (solr-4.6.0으로 이동)
    sudo cp -a example/solr /usr/local/share/solr
    sudo chown -R jetty:jetty /usr/local/share/solr
    sudo cp dist/solr.war /var/lib/jetty/webapps/

  2. /etc/default/jetty 편집
    NO_START=0
    JETTY_HOST=0.0.0.0
    JAVA_OPTIONS="-Dsolr.solr.home=/usr/local/share/solr -Dsolr.clustering.enabled=false $JAVA_OPTIONS"
    

4. 서비스 시작

sudo service jetty start

http://localhost:8080/solr/ 로 접속하면 다음과 같은 Solr 페이지를 확인할 수 있다.

5. 참고

현재(2013/11/27), 루씬 한글분석기 커뮤니티에서 배포하고 있는 Solr 4.X용 Arirang Analyzer 1.1.2는 Solr 4.6에서는 에러가 발생하는 것으로 보인다. 따라서, 새 버전의 Arirang Analyzer이 나오기 전에는 4.5를 사용해야할 것 같다.


  1. 2014.01.08 20:07

    비밀댓글입니다

XenServer 6.2가 오픈소스로 공개되면서, 무료로 사용할 수 있게 되었지만, 중요한 기능 중에 하나인 업데이트 기능이 빠졌다. 물론 라이센스를 구매해서 업데이트 도구를 사용하는 것이 가장 좋겠지만, 무료로 사용하더라도 패치는 Citrix에서 제공하고 있다.

이것을 받아서 수동으로 패치하는 방법을 소개한다.

1. 패치 확인

패치가 나온 것을 확인해야하는데, 이것은 XenCenter를 사용하면, 알림으로 새로운 패치가 나왔음을 알려주기 때문에 쉽게 알 수 있다. 이 알림 메시지에서 중요한 것은 패치 번호이다. (예: XS62E001) 이 번호를 Citrix의 고객지원 페이지(http://support.citrix.com/)에서 검색하면, 패치 안내 페이지를 찾을 수 있다.

예를 들면, XS62E001을 사이트 검색폼에 넣고 검색하면 "Hotfix XS62E001 - For XenServer 6.2.0" 이란 제목의 글이 검색 결과로 나오고, 다운로드 링크를 통해서 패치를 다운로드 받을 수 있다.

2. 패치 적용

패치를 다운로드하는 페이지에 설치 방법에 대한 안내가 나와있기 때문에 그대로 따라하면 된다. 적용할때에는 XenCenter에 포함되어있는 xe.exe 프로그램을 사용한다.


참고


필요에 의해서 한국어 형태소 분석기를 찾아보기도 했고, MeCab을 이용한 한국어 형태소 분석과 폐쇄적인 21세기 세종 계획 성과물이란 글을 보면서 쓸만한 오픈소스 형태소 분석기가 없다는 것에 실망한 적이 있었다. 내가 전문가는 아니라서 잘 모르는 것일 수도 있겠지만, 영어는 물론이고 일본어도 연구 결과들이 공유되고 발전해가는 것이 보이는데, 왜 한국어는 없는지 답답했다. 그래서 "검색에서 쓸만한 오픈소스 한국어 형태소 분석기를 만들자!"라는 생각으로 시작했다는 전한닢 프로젝트를 보고 상당히 반가운 기분이 들었다.

그래서 한번 사용을 위해서 테스트를 해보기로 했다. 은전한닢 프로젝트는 일본어 형태소 분석기인 mecab에 한국어 형태소 사전을 추가한 형태로, 이를 사용하기 위한 Lucene/Solr용 tokenizer를 제공하고 있다. 그래서 사용해보려면 우선 mecab 설치가 필요하다.

테스트는 ubuntu 12.04 에서 진행했다.


mecab 설치

mecab은 ubuntu 저장소에 들어가있기때문에 쉽게 설치가 가능하다. 신경쓸 것은 컴파일이 필요하기 때문에 libmecab-dev 패키지도 별도로 설치가 필요하다는 것 정도이다.

$ sudo apt-get install mecab libmecab-dev


mecab-ko-dic 설치

mecab-ko-dic이 은전한닢 프로젝트의 핵심 결과물이라고 할 수 있는데, bitbucket 저장소에서 배포중이고, 사실 설치방법도 여기에 한국어로 친절하게 소개되어있기도 하다. 저장소의 다운로드 페이지에서 mecab-ko-dic 최신 버전을 다운로드 받아서 다음과 같이 컴파일하자. 이 글을 쓰는 시점에서 최신버전은 1.1.3 버전이다.

$ tar xzf mecab-ko-dic-1.1.3-20130226.tar.gz
$ cd mecab-ko-dic-1.1.3-20130226/
$ ./configure
$ make

컴파일이 잘 되었는지 테스트해보려면 다음과 같이 확인할 수 있다.

$ mecab -d .(엔터)
잘 설치되었는지 확인하려면 이렇게 확인할 수 있다.(엔터)
잘    MAG,T,잘,*,*,*,*
설치    NN,F,설치,*,*,*,*
되    XSV,F,되,*,*,*,*
었    EP,T,었,*,*,*,았/EP
는지    EC,F,는지,*,*,*,*
확인    NN,T,확인,*,*,*,*
하    XSV,F,하,*,*,*,*
려면    EC,T,려면,*,*,*,*
이렇    VA,T,이렇,*,*,*,*
게    EC,F,게,*,*,*,*
확인    NN,T,확인,*,*,*,*
할    XSV+ETM,T,할,Inflect,XSV,ETM,하/XSV+ㄹ/ETM
수    NNB,F,수,*,*,*,*
있    VV,T,있,*,*,*,*
다    EF,F,다,*,*,*,*
.    SF,*,*,*,*,*,*
EOS
(Ctrl + d)
$

이렇게 표시되면 잘 동작하는 것이다. 설치를 마무리하려면 다음과 같이 입력한다.

$ sudo make install

이렇게 하면 "/usr/lib/mecab/dic/mecab-ko-dic"에 사전 파일이 저장되고 설치가 끝난다고 했는데, 나의 경우에는 다음과 같은 오류가 발생했다.

test -z "/usr/lib/mecab/dic/mecab-ko-dic" || /bin/mkdir -p "/usr/lib/mecab/dic/mecab-ko-dic"
 /usr/bin/install -c -m 644 ./model.bin matrix.bin char.bin sys.dic unk.dic left-id.def right-id.def rewrite.def pos-id.def dicrc '/usr/lib/mecab/dic/mecab-ko-dic'
/usr/bin/install: cannot stat `./model.bin': No such file or directory
make[1]: *** [install-dicDATA] Error 1
make[1]: Leaving directory
make: *** [install-am] Error 2

model.bin 파일이 없어서 나는 오류인데, 그냥 무시하고 진행해도 별 문제없이 동작하는 것으로 보인다. mecab 설정파일(/etc/mecabrc)을 다음과 같이 수정해주면 설치가 끝난다.

6c6
< dicdir = /var/lib/mecab/dic/debian
---
> dicrc = /usr/lib/mecab/dic/mecab-ko-dic

root 권한이 없는 경우에는 사전파일들을 적당한 디렉토리에 넣어두고, 홈디렉토리에 .mecabrc 파일을 만들어서 동일한 설정을 해줘도 된다.

테스트 해보면 다음과 같다.

$ mecab(엔터)
설치가 다 끝났는지 확인하려면 이렇게 해보자.(엔터)
설치    NN,F,설치,*,*,*,*
가    JKS,F,가,*,*,*,*
다    MAG,F,다,*,*,*,*
끝났    VV+EP,T,끝났,Inflect,VV,EP,끝나/VV+았/EP
는지    EC,F,는지,*,*,*,*
확인    NN,T,확인,*,*,*,*
하    XSV,F,하,*,*,*,*
려면    EC,T,려면,*,*,*,*
이렇    VA,T,이렇,*,*,*,*
게    EC,F,게,*,*,*,*
해    VX+EC,F,해,Inflect,VX,EC,하/VX+ㅕ/EC
보    VX,F,보,*,*,*,*
자    EF,F,자,*,*,*,*
.    SF,*,*,*,*,*,*
EOS
(Ctrl + d)
$


Windows 업데이트를 하려고 할때 80070003 오류가 발생하면서 업데이트가 되지 않는 경우가 있다. 이럴 때는 0x80240022 오류가 나면서 Windows Defender의 바이러스/스파이웨어 정의도 업데이트 되지 않을 수 있다. 나의 경우에는 Windows 8에서 이런 경우가 발생했는데, 이전 버전에서도 발생하는 오류인 것 같다.

해결 방법은 다음과 같다.

  1. Windows Update 중지
    제어판 - 서비스 에서 Windows Update 항목에서 우클릭하여 나오는 문맥 메뉴에서 중지를 클릭한다.
  2. 임시 업데이트 파일 제거
    Windows 설치된 드라이브에서 다음 두 폴더의 내용을 모두 삭제한다.
    \Windows\SoftwareDistribution\DataStore
    \Windows\SoftwareDistribution\Download
  3. Windows Update 시작
    제어판 - 서비스 에서 Windows Update 항목에서 우클릭하여 나오는 문맥 메뉴에서 시작을 클릭한다.

나의 경우에는 2번에서 \Windows\SoftwareDistribution 폴더내의 모든 것을 삭제해서 해결했다.

참고 : Windows Update 오류 80070003

  1. ㅇㅇㅇ 2016.03.17 19:00 신고

    datastore 파일이 삭제가 안되는데 왜그러나요??ㅠㅠ

  1. regedit를 실행해서 아래 키 값을 '0' 으로 바꾼다.
  2. HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/setup/OOBE/mediabootinstall

  3. 명령프롬프트에 'slmgr /rearm' 을 타이핑하고 리부팅한다.
  4. 정품인증 끝!


Windows 7 이상 버전에서 응용프로그램 실행시, 파일 열기 대화상자 등에서 네트워크 드라이브가 표시되지 않는 경우가 있다. 탐색기 등에서는 정상적으로 표시되고 접근이 되지만, 응용프로그램에서만 표시되지 않는 경우인데, 레지스트리를 수정해서 해결이 가능하다.

  1. regedit를 실행하여 아래 위치를 찾는다.
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
  2. 다음 값을 추가한다.
    EnableLinkedConnections / DWORD / 1

출처 : http://support.microsoft.com/kb/937624/ko

Mac OS X의 Spotlight 기능은 유용하지만, 외장 디스크를 연결했을 때는 대부분의 경우 필요없는데도 자동으로 인덱싱을 하느라 디스크를 사용한다. 따라서, 인덱싱을 하지 않도록 지정하여 이런 일을 막을 수 있는데, "터미널"에서 다음 명령어로 인덱싱을 하지 않도록 설정할 수 있다.

sudo mdutil -i off /Volumes/[장치이름]

리눅스에서 zip 파일 압축을 풀었는데, 한글로 된 파일이름이 깨져서 알아볼수가 없게 되는 경우가 있다. 대부분 Windows에서 압축한 파일들이 그러한데, 이럴 때에는 다음과 같이 풀어주면 된다.

$ unzip -O cp949 [파일이름]

Ruby on Rails 데모 동영상 등에 등장하며, 인기를 끌었던 Mac OS X용 에디터인 TextMate가 GNU GPLv3로 소스 공개되었다. GitHub에서 소스를 다운로드 받을 수 있고, 이것을 사용할 수 있게 빌드하는 방법도 친절하게 올라와 있어서 어렵지 않게 설치할 수 있다. 설치 과정을 한번 정리해봤다. (자세한 설치 방법은 여기를 참고) 아래의 설치 과정은 Mac OS X 10.7, HomeBrew 설치된 환경에서 진행되었다.

1. 소스코드 받기

git이 설치되어있다면 다음과 같이 받을 수 있다.

$ git clone https://github.com/textmate/textmate.git
$ cd textmate

만약에 git이 없다면, GitHub 프로젝트 페이지에서 ZIP으로 다운로드 받아서 압축을 풀어도 된다.

2. 필요한 프로그램 설치

문서를 보면 빌드에 필요한 프로그램이 있다. 앞서 밝힌대로 나는 HomeBrew를 사용하고 있기때문에 다음과 같이 설치했다.

$ brew install --HEAD https://raw.github.com/adamv/homebrew-alt/master/head-only/ninja.rb
$ brew install ragel boost multimarkdown hg
$ brew install pgrep

3. 빌드

그리고 다음과 같이 빌드를 시작하면 설치가 끝난다.

$ ./configure
$ ninja

하지만, 다음과 같은 메시지만 나오고 진행되지 않았다.

$ ./configure
clang is too old to build this project.
Please see README.md for build instructions.
$

이것은 삽질의 징조..

문서를 봐도 HomeBrew를 사용할 경우에는 저 메시지에 나오는 clang을 어쩌라는 말은 없다. MacPorts를 사용할 경우의 설치 방법만 소개되어있다.

별도로 설치하는 방법을 알아보다가 혹시나해서 Xcode 4.4.1 을 설치하니, 저 메시지가 나오지 않고 빌드가 진행된다. 빌드가 끝나면 자동으로 TextMate가 실행된다.

~/build/TextMate/Applications/TextMate/ 에 TextMate.app 가 있으니, 원하는 곳에 옮겨놓고 사용하면된다.

4. 결론

  • 빌드는 문서가 꽤 잘 되어있으니 보고 따라하면 된다.
  • clang 문제가 있다면, 먼저 Xcode 4.4.1를 설치해보자. (MacPorts를 사용한다면 MacPorts로 설치해도 상관없겠지만..)
  • 공짜는 역시 좋다?

+ Recent posts