728x90
반응형
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)
압축해제 solr-5.5.2.tgz
/usr/local로 solr 폴더로 이름변경후 MOVE
cd /usr/localsolr 디렉토리 이동
bin/solr start
vrcode(DB) core 생성
bin/solr create –c vrcode
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://localhost:8983 웹 상에서 라이브러리 에러남
##########
/usr/local/solr/server/solr/vrcode/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 파일을 사용합니다.
- 위 작업은 DATA를 넣을수 있게 해주는 dataimporthandler 라이브러리를 설정하는 작업입니다.
13) mapps-app-jdbc.xml 파일을 생성후 아래와 같이 수정
- 접속정보, 쿼리 , 사용할 필드 정의가 들어가게됩니다.
<dataConfig>
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db:3306/pplus?autoReconnect=true&useUnicode=true&characterEncoding=utf8" user="root" password="DBPASS" batchSize="-1" />
<document>
<entity pk="seq" name="page" query="
Query // 외부 노출 이슈로 삭제
">
<field column="seq" name="id" />
<field column="page_seq_no" name="page_seq_no" />
.....
// 컬럼 정의 부분 외부 노출 이슈로 삭제
</entity>
</document>
</dataConfig>
- dataSource는 JDBC연결 관련한 설정
- entity는 import에 사용될 쿼리가 들어가게 됩니다.
- Field 는 entitity에서 사용된 쿼리의 필드를 솔라에서 사용하게 정의를 해줍니다.
- 즉 쿼리할필드가 추가가 되면, 쿼리문에 필드추가후 field에도 똑같이 매핑하는 작업을 하셔야합니다.
**** query=" 빨간 부분부터 개발자가 짜준 쿼리를 입력
추가적으로 deltaimport 나 deltaqueryimport 를 추가할땐 query=가 끝나고 다음줄에 추가 해주면 됨
예)
<entity pk="seq" name="page" query="
Query // 외부 노출 이슈로 삭제
deltaImportQuery="
// 외부 노출 이슈로 삭제
deltaQuery="
// 외부 노출 이슈로 삭제
">
참고로 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>
- /usr/local/solr/server/solr/vrcode/conf/managed-schema 파일에서 317라인참조
- SOLR가 한글처리에 빈약하므로, 상위부분을 추가시킨 부분입니다.
16) 인덱싱 및 저장될 데이터 여부를 결정
- <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/> 를 찾아 아래에 추가
- 현재부분은 13)번의 mapps-app-jdbc.xml에서의 정의한 내용대로 필드정의를 해주면됩니다.
- indexed 가 true이면 검색조건에 포함하겠다는것이고, stroed는 데이터를 저장하고 가지고 있게냐에 대한 내용입니다.
- type은 전체적으로 text_ko라고 정의를 했는데 크게 지장은 없어서 맞추었고 , fancount만 float으로 정의를 했는데 혹시모를 integer범위를 넘어서는 경우가 있지않을까 해서 정의를 한것입니다.
- multivalued 가 true가 아닌것들이 있는데 소팅조건에 포함되는 내용은 multiValued를 사용하지 말아야합니다 (default는 false 입니다)
- /usr/local/solr/server/solr/vrcode/conf/manage-schema 파일의 428라인참조
<field name="nickname" type="text_ko" multiValued="true" indexed="true" stored="true"/>
...... // 컬럼 정의 부분 외부 노출 이슈로 삭제
17) 검색했을 경우 출력될 필드 정의
- 16)번과 마찬가지로 13)의 쿼리필드에 포함된 내용을 아래와 같이 정의를 해주면됩니다.
- /usr/local/solr/server/solr/vrcode/conf/manage-schema 파일의 526라인참조
<copyField source="id" dest="text"/>
...... // 컬럼 정의 부분 외부 노출 이슈로 삭제
참고로 copyField 는 multiValued="true" 로 되어있는 필드만 정의 해주면 됨. (검색시 예를들면 제목+내용+지은이 이런식의 검색이 들어갈경우 '제목' '내용' '지은이' 의 컬럼을 multiValued="true" 로 해주고 <copyField source="제목" dest="제목+내용+지은이"/> 와 같이 필드를 복사해서 이용하면 됨)
마무리 )
/usr/local/solr/bin/solr.in.sh
해당 스크립트에
#SOLR_JAVA_MEM="-Xms512m -Xmx512m" 해당 줄이 솔라에 할당하는 메모리 설정 구간
SOLR_JAVA_MEM="-Xms10g -Xmx15g"
위와 같이 설정하려면 SOLR_HEAP="512m" 이설정에 주석처리 후 적용
18) UI상에서 데이터 IMPORT
http://IP:8983/solr/#/vrcode/dataimport//dataimport
19) 쿼리테스트 해볼수있는 URL
http://IP:8983/solr/#/vrcode/query
20) 인덱싱 커멘드
데이터 베이스 풀 인덱싱
http://IP:8983/solr/vrcode/dataimport?command=full-import
데이터 증분 인덱싱
http://IP:8983/solr/ vrcode /dataimport?command=delta-import
21) 형태소 분석기 및 검색관련 카페
http://cafe.naver.com/korlucene.cafe
반응형
'엔지니어 > Linux' 카테고리의 다른 글
ISCSI 설정하기 (0) | 2016.11.18 |
---|---|
Creating LUNs using LVM in iSCSI Target Server (0) | 2016.11.18 |
/var/log/messages 에 명령어 history 넣기 (0) | 2016.11.18 |
centos 6 python3 설치 (0) | 2016.11.18 |
iptables-FORWARD chain 작동안할때 (0) | 2016.11.18 |