728x90
반응형
SOLR 5.5.2 단독형 설치 (with jdbc, arirang.lucene-analyzer)
cd /usr/local/src
wget http://archive.apache.org/dist/lucene/solr/5.5.2
(http://archive.apache.org/dist/lucene/solr/5.5.2/solr-5.5.2.tgz)
tar xvf solr-5.5.2.tgz
mv solr-5.5.2 /usr/local/solr
cd /usr/local/solr
bin/solr start
(DB) core 생성
bin/solr create_core –c CORE명(DB)
http://IP:8983/solr 를 브라우져에서 실행하여 solr manager 화면이 나왔다면 성공!
MySQL 연동을 위한 라이브러리 다운로드
mysql-connector-java-5.1.39.jar
형태소 분석을 위한 라이브러리 다운로드
arirang.lucene-analyzer-6.1-1.0.0.jar
arirang-morph-1.0.3.jar
*** 중요 ****
/usr/local/solr/server/lib 디렉토리에 아래 받은 라이브러리 COPY
- mysql-connector-java-5.1.39.jar
- arirang.lucene-analyzer-6.1-1.0.0.jar
- arirang-morph-1.0.3.jar
해당 jar 파일은 /usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib 에 꼭 넣어야함 안그러면 http://IP:8983 웹 상에서 라이브러리 에러남
##########
/usr/local/solr/server/solr/CORE명/conf 폴더로 이동
solrconfig.xml 파일을 열어서 아래와 같은 위치를 찾는다
before)
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
수정 -> after)
<lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-clustering-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/langid/lib/" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-langid-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/velocity/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-velocity-\d.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-\d.*\.jar" />
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">mapps-app-jdbc.xml</str>
</lst>
</requestHandler>
- 빨간 부분 추가
- dataimport 관련하여 라이브러리를 추가시키는 작업
- Import 관련 config는 mapps-app-jdbc.xml 파일을 사용
- 위 작업은 Mysql DATA를 넣을수 있게 해주는 dataimporthandler 라이브러리를 설정하는 작업
13) mapps-app-jdbc.xml 파일을 생성후 아래와 같이 수정
- 접속정보, 쿼리 , 사용할 필드 정의가 들어가게 됨
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://DB.IP:3306/DB명?autoReconnect=true&useUnicode=true&characterEncoding=utf8" user="USER" password="PASSWORD" batchSize="-1" />
<document>
<entity pk="seq" name="page" query="
SELECT
.... 생략(쿼리 내용)
">
<field column="COLUMN 명" name="COLUMN을 정의한 NAME" />
</entity>
</document>
</dataConfig>
- dataSource는 JDBC연결 관련한 설정
- entity는 import에 사용될 쿼리가 들어가게 됨
- Field 는 entitity에서 사용된 쿼리의 필드를 솔라에서 사용하게 정의
- 즉 쿼리할필드가 추가가 되면, 쿼리문에 필드추가후 field에도 똑같이 매핑하는 작업
추가적으로 deltaimport 나 deltaqueryimport 를 추가할땐 query=가 끝나고 다음줄에 추가 해주면 됨
예)
<entity pk="seq" name="page" query="
SELECT
...... 생략(쿼리 내용)
deltaImportQuery="
SELECT
...... 생략(쿼리 내용)
deltaQuery="
SELECT
...... 생략(쿼리 내용)
참고로 deltaimport 란 ? 변경된 DB의 정보만 가져와서 업데이트 하는 작업
이런식으로 추가 해주면 됨
manage-schema 에 text_ko와 text_ko_auto일 경우 한글 형태소 분석기를 사용하도록 정의
<fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->
<tokenizer class="solr.kr.KoreanTokenizerFactory" hasOrigin="true" hasCNoun="false" bigrammable="true" />
<filter class="solr.kr.KoreanFilterFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
</analyzer>
<analyzer type="query">
<!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->
<tokenizer class="solr.kr.KoreanTokenizerFactory"/>
<filter class="solr.kr.KoreanFilterFactory" hasOrigin="true" hasCNoun="false" bigrammable="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
</analyzer>
</fieldType>
<fieldType name="text_ko_auto" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->
<tokenizer class="solr.kr.KoreanTokenizerFactory"/>
<filter class="solr.kr.KoreanFilterFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
add enablePositionIncrements=true in both the index and query
analyzers to leave a 'gap' for more accurate phrase queries.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
</analyzer>
<analyzer type="query">
<!--<tokenizer class="solr.WhitespaceTokenizerFactory"/>-->
<tokenizer class="solr.kr.KoreanTokenizerFactory"/>
<filter class="solr.kr.KoreanFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/>
</analyzer>
</fieldType>
<fieldType name="uuid" class="solr.UUIDField" indexed="true" />
</types>
15) 필드타입정의하는 부분을 찾아 text_ko 추가
<fieldType name="text_ko" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ClassicFilterFactory"/>
<filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="true" hasCNoun="true" bigrammable="false"/>
<filter class="org.apache.lucene.analysis.ko.HanjaMappingFilterFactory"/>
<filter class="org.apache.lucene.analysis.ko.PunctuationDelimitFilterFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ClassicFilterFactory"/>
<filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="true" hasCNoun="true" bigrammable="false"/>
<filter class="org.apache.lucene.analysis.ko.WordSegmentFilterFactory" hasOrijin="true"/>
<filter class="org.apache.lucene.analysis.ko.HanjaMappingFilterFactory"/>
<filter class="org.apache.lucene.analysis.ko.PunctuationDelimitFilterFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
</fieldType>
- SOLR가 한글처리에 빈약하므로, 상위부분을 추가시킨 부분입니다.
16) 인덱싱 및 저장될 데이터 여부를 결정
- <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/> 이런식으로 13)번의 mapps-app-jdbc.xml에서의 정의한 내용과 같이 필드정의를 해주면 됨
- indexed 가 true이면 검색조건에 포함하겠다는 것이고, stored는 데이터를 저장에 대한 내용
- type은 자료형에 맞게끔 정의
- multiValued 란 문서에서 한 필드에 쓰일 값들이 두 개 이상일 수 있는 경우를 일컫습니다.
모든 설정이 되었으면
http://IP:8983/solr 로 접속하여 CORE 선택 후 Dataimport 에서 Execute 로 데이터를 넣고 완료가 되면 Query 로 테스트하여 정상적으로 동작하는지 체크
이상이 없다면 완료
Dataimport 가 정상적으로 되지 않을 경우 jvm 에 Heap Memory 설정이 너무 낮게 설정되어 오류가 나는 경우가 있음.
아래 설정도 체크
/usr/local/solr/bin/solr.in.sh
해당 스크립트에
#SOLR_JAVA_MEM="-Xms512m -Xmx512m" 해당 줄이 솔라에 할당하는 메모리 설정 구간
SOLR_JAVA_MEM="-Xms10g -Xmx15g"
위와 같이 설정하려면 SOLR_HEAP="512m" 이설정에 주석처리 후 적용
반응형
'엔지니어 > Linux' 카테고리의 다른 글
ats 모듈 만들기 (0) | 2017.01.13 |
---|---|
Apache traffic server-5.2.1 install (0) | 2017.01.13 |
LVM(Logical Volume Manage)이란? (0) | 2017.01.10 |
본딩 해쉬 알고리즘 관련한 글 (0) | 2017.01.10 |
Linux Perfoment Tools (0) | 2017.01.10 |