메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


1. 아래의 사이트를 참조한다.

http://cafe.naver.com/korlucene


2. github에서 소스를 받아 빌드(goal : install)한다.

https://github.com/korlucene/arirang-analyzer-6


3. build된 *.jar파일을 각노드에 복사


빌드된 arirang.lucene-analyzer-6.2-1.1.0.jar파일과 pom프로젝트의 lib폴더에 있는 arirang-morph-1.1.0.jar파일을 서버에 복사

가. target폴더에 생성된 arirang.lucene-analyzer-6.2-1.1.0.jar파일을 solr가 설치된 폴더의 server/solr-webapp/webapp/WEB-INF/lib에 복사한다.

나. arirang-analyzer-6/lib폴더에 있는 arirang-morph-1.1.0.jar파일을 solr가 설치된 폴더의 server/solr-webapp/webapp/WEB-INF/lib에 복사한다.


가. scp -P 10022 arirang.lucene-analyzer-6.2-1.1.0.jar arirang-morph-1.1.0.jar root@gsda2:$HOME/solr/server/solr-webapp/webapp/WEB-INF/lib/


나. scp -P 10022 arirang.lucene-analyzer-6.2-1.1.0.jar arirang-morph-1.1.0.jar root@gsda3:$HOME/solr/server/solr-webapp/webapp/WEB-INF/lib/


다. scp -P 10022 arirang.lucene-analyzer-6.2-1.1.0.jar arirang-morph-1.1.0.jar root@gsda4:$HOME/solr/server/solr-webapp/webapp/WEB-INF/lib/


3-1. 사용할 collection생성(예시로 제시된 sample_techproducts_configs를 이용하여 gc라는 이름의 컬렉션을 생성함)

$HOME/solr/server/solr/configsets# cp -r sample_techproducts_configs gc


4. $HOME/solr/server/solr/configsset/gc/conf/managed-schema파일에 아래의 내용을 추가(한글 형태소 분석기 사용 설정)

    (managed-schema의 위치는 변경될 수 있음, default위치는 $HOME/solr/server/solr/configsets임)

<fieldType name="text_ko" class="solr.TextField">
		<analyzer type="index">
			<tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
			<filter class="solr.WordDelimiterFilterFactory"/>
			<filter class="solr.LowerCaseFilterFactory"/>
			<filter class="solr.ClassicFilterFactory"/>
			<filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="true" hasCNoun="true"  bigrammable="false" queryMode="false"/>
			<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="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" ignoreCase="true" words="stopwords.txt"/>
		</analyzer>
		<analyzer type="query">
			<tokenizer class="org.apache.lucene.analysis.ko.KoreanTokenizerFactory"/>
			<filter class="solr.WordDelimiterFilterFactory"/>
			<filter class="solr.LowerCaseFilterFactory"/>
			<filter class="solr.ClassicFilterFactory"/>
			<filter class="org.apache.lucene.analysis.ko.KoreanFilterFactory" hasOrigin="true" hasCNoun="true" bigrammable="false" queryMode="false"/>
			<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="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" ignoreCase="true" words="stopwords.txt"/>
		</analyzer>
	</fieldType>


* 특정필드에 적용하고 싶으면 아래와 같이 field의 type를 text_ko로 지정한다

<field name="title" type="text_kor"/>


5. solr를 재시작한다.(bin/solr.in.sh에 SolrCloud관련 설정이 되어있다고 가정함)


bin/solr restart


6.$HOME/solr/server/solr/configsset/gc/conf/managed-schema파일에 아래의 내용을 추가(상품정보를 인덱싱하기 위한 샘플 schema임)

 <field name="auc_no" type="string" indexed="true" stored="true" multiValued="true"/>
 <field name="cate" type="text_ko" indexed="true" stored="true" multiValued="true"/>
 <field name="title" type="text_ko" indexed="true" stored="true" multiValued="true"/>
 <field name="contents" type="text_ko" indexed="true" stored="true" multiValued="true"/>
 <field name="sel_cnt" type="int" indexed="false" stored="true" multiValued="true"/>
 <field name="seller_id" type="string" indexed="true" stored="true" multiValued="true"/>
 <field name="seller_name" type="string" indexed="true" stored="true" multiValued="true"/>
 <field name="buyer_id" type="string" indexed="true" stored="true" multiValued="true"/>
 <field name="buyer_name" type="string" indexed="true" stored="true" multiValued="true"/>
 <field name="sel_price" type="float" indexed="true" stored="true" multiValued="true"/>
 <field name="auc_price" type="float" indexed="true" stored="true" multiValued="true"/>
 
 <field name="start_date" type="date" indexed="true" stored="true" multiValued="true"/>
 <field name="end_date" type="date" indexed="true" stored="true" multiValued="true"/>
 
 <field name="img_url" type="string" indexed="false" stored="true" multiValued="true"/>


7. 생성할 collection(이름 : gc)용 conf정보를 zookeeper에 업로드한다.

$HOME/solr/server/scripts/cloud-scripts# zkcli.sh -z gsda1:2181,gsda2:2181,gsda3:2181 -cmd upconfig -c gc -n gc -d $HOME/solr/server/solr/configsets/gc/conf


8. colleciton(이름: gc)를 생성한다.

bin/solr create -c gc -shards 4 -replicationFactor 2

* collection을 지울때는 : bin/solr delete -c gc


9. 컬렉션 gc에 등록할 데이타를 생성한다(gc_data.csv의 이름으로 생성하고 서버에 올려둔다.)

id,title
"Nara_0362360","2002, (민트2개팝니다)2002년5원10원흑점있음"
"Nara_0362361","미얀마 1994년 100챠트. P 75. UNC/ 필라코인"
"Nara_0362362","미얀마 1995년 1000챠트. P 75. UNC/ 필라코인"
"Nara_0362363","미얀마1995년1000챠트.P75.UNC/필라코인"


* 파일을 서버에 올리지 말고 solr어드민 화면에서 추가할 수도 있음

solr데이타등록.png



10. 샘플데이타를 gc에 post한다.

root@gsda1:~/solr/bin# post -c gc  gc_data.csv        


-->콘솔에 보여지는 메세지
/usr/lib/jvm/java-8-oracle/bin/java -classpath /svc/apps/gsda/bin/hadoop/solr/dist/solr-core-6.2.0.jar -Dauto=yes -Dc=gc -Ddata=files org.apache.solr.util.SimplePostTool gc_data.csv
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/gc/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file gc_data.csv (text/csv) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/gc/update...
Time spent: 0:00:00.861


11. 서치쿼리를 수행한다.

solr쿼리화면.png




번호 제목 날짜 조회 수
741 [Ranger]RangerAdminRESTClient Error gertting pplicies; Received NULL response!!, secureMode=true, user=rangerkms/node01.gooper.com@ GOOPER.COM (auth:KERBEROS), serviceName=cm_kms 2023.06.27 73
740 [vue storefrontui]외부 API통합하기 참고 문서 2022.02.09 80
739 [Encryption Zone]Encryption Zone에 생성된 table을 select할때 HDFS /tmp/zone1에 대한 권한이 없는 경우 2023.06.29 83
738 ./gradlew :composeDown 및 ./gradlew :composeUp 를 성공했을때의 메세지 2023.02.20 84
737 [EncryptionZone]User:testuser not allowed to do "DECRYPT_EEK" on 'testkey' 2023.06.29 89
736 [vi] test.nq파일에서 특정문자열(예, <>)을 찾아서 포함되는 라인을 삭제한 동일한 이름의 파일을 만드는 방법 2017.01.25 98
735 CM의 Impala->Query tab에서 FINISHED query가 보이지 않는 현상 2021.08.31 98
734 [Impala] alter table구문수행시 "WARNINGS: Impala does not have READ_WRITE access to path 'hdfs://nameservice1/DATA/Temp/DB/source/table01_ccd'" 발생시 조치 2024.04.26 98
733 restaurant-controller,에서 등록 예시 2022.04.30 99
732 주문히스토리 조회 2022.04.30 99
731 [Hue metadata]Oracle에 있는 Hue 메타정보 테이블을 이용하여 coordinator와 workflow관계 목록을 추출하는 방법 2023.08.22 99
730 [Cloudera Agent] Metadata-Plugin throttling_logger INFO (713 skipped) Unable to send data to nav server. Will try again. 2022.05.16 103
729 oozie의 sqoop action수행시 ooize:launcher의 applicationId를 이용하여 oozie:action의 applicationId및 관련 로그를 찾는 방법 2023.07.26 103
728 [CDP7.1.6,HDFS]HDFS파일을 삭제하고 Trash비움이 완료된후에도 HDFS 공간을 차지하고 있는 경우 확인/조치 방법 2023.07.17 107
727 [CDP7.1.7, Replication]Encryption Zone내 HDFS파일을 비Encryption Zone으로 HDFS Replication시 User hdfs가 아닌 hadoop으로 수행하는 방법 2024.01.15 110
726 주문 생성 데이터 예시 2022.04.30 112
725 호출 url현황 2023.02.21 112
724 [CDP7.1.7, Hive Replication]Hive Replication진행중 "The following columns have types incompatible with the existing columns in their respective positions " 오류 2023.12.27 113
723 eclipse 3.1 단축키 정리파일 2017.01.02 117
722 [CDP7.1.7]Oozie job에서 ERROR: Kudu error(s) reported, first error: Timed out: Failed to write batch of 774 ops to tablet 8003f9a064bf4be5890a178439b2ba91가 발생하면서 쿼리가 실패하는 경우 2024.01.05 118
위로