7. 7
01
war 풀고 묶기
다운로드
1) Jdbc Connector jar
- Oracle
http://www.oracle.com/technetwork/database/features/
jdbc/index-091264.html
- Mysql
http://cdn.mysql.com/Downloads/Connector-J/mysql-co
nnector-java-5.1.26.tar.gz
- MSSQL
http://msdn.microsoft.com/en-us/sqlserver/aa937724.a
spx
2) 한글 형태소 분석기 jar
3) 기타 추가 lib
다시 묶기
jar cvf ../solr4.4.0.war *
9. 9
02
Jetty 실행
java -Djetty.port=8080 –jar start.jar
설치 및 실행
Tomcat 실행
1) $TOMCAT_HOME/conf/Catalina/localhost/ 폴더에
solr44.xml 생성
<Context docBase="C:SOLR_HOMEsolr-4.4.0.war" debug="0"
crossContext="true" >
<Environment name="solr/home" type="java.lang.String"
value="C:SOLR_HOMEsolr44" override="true" />
</Context>
2) bin/startup.sh
Heap 메모리 늘리기
1) $TOMCAT_HOME/bin/catalina.sh 에 추가
JAVA_OPTS="-server -Xms1500m -Xmx1500m -
XX:MaxPermSize=256m"
12. 12
03
기본 데이터 (우아한 형제들 제공 상점 정보)
1000건)
필드 구성
새로운 코어 생성
SOLR_HOME/solr.xml 수정
<cores adminPath="/admin/cores" host="${host:}"
hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}">
<core name="core0" instanceDir="core0" />
<core name="core1" instanceDir="core1" />
<core name="shop" instanceDir="shop" /> <!– 추가
</cores>
13. 13
03
RDBMS vs 검색엔진
필드 구성
데이터베이스
행(Row)
테이블(Table)
컬럼(Column)
스키마
검색엔진
문서(Document)
인덱스(Core)
필드(Field)
스키마(Schema)
15. 15
03
schema.xml 파일 수정
필드 구성
3) 유니크 키를 정의
<uniqueKey>Shop_No</uniqueKey>
4)기본 검색 필드 정의
<defaultSearchField>Shop_Nm</defaultSearchField>
5)기본 연산자 정의
<solrQueryParser defaultOperator="AND"/>
17. 17
03
Analyzer 란?
필드 구성
Lucene에서의 형태소 분석기란?
Tokenizer + Filter = Analyzer
Tokenizer는 무조건 1개맊 결합 할 수 있다.
Filter는 여러 개를 결합 가능하다.
Filter는 순서가 중요하다.
Tokenizer로 나누어진 것을 Token이라 하고
Filter를 거쳐서 최종적으로 색인시에 사용하는 것을 Term이라 한다.
29. 29
05
랭킹
검색
1) Query Time Ranking vs Index Time Ranking
- Index Time Ranking
Doc Boost 이용
- Query Time Ranking
기본은 TF – IDF + 필드별 가중치 + Function Query
예) {!boost b=recip(ms(NOW,Reg_Date),3.16e-11,0.08,0.05)}
33. 33
06
샤딩(Sharding)
데이터를 횡으로 나누어 배치하는 전략
확장
검색쿼리
'http://localhost:8983/solr/select?shards=localhost:8983/solr,l
ocalhost:7574/solr&indent=true&q=ipod+solr'
36. 36
07
Analyzer 개발
커스트 마이징
Lucene의 분석기 상속 구조
TokenStream
Tokenizer TokenFilter
CharTokenizer
WhiteSpaceTokenizer
LetterTokenizer LowCaseTokenizer
StandardTokenizer
LowCaseTokenFilter
StandardTokenFilter
PorterStemTokenFilter
StopFilter
적당한 지점에서 상속을 받은후
incrementToken() 및 주요 멤버 함수를 오버라이딩
37. 37
07
개발된 Analyzer 를 Solr 에 연결
커스트 마이징
package org.apache.lucene.analysis.jaso;
import java.io.Reader;
import java.util.Map;
//import org.apache.lucene.analysis.kr.KoreanFilter;
import org.apache.lucene.analysis.util.TokenizerFactory;
public class JasoTokenizerFactory extends TokenizerFactory {
private int mode = 0;
private boolean typo = true;
@Override
public void init(Map<String, String> args) {
super.init(args);
mode = getInt("mode", 0);
typo = getBoolean("typo", true);
}
public JasoTokenizer create(Reader input) {
return new JasoTokenizer(luceneMatchVersion,input,mode,typo);
}
}
TokenizerFactory를 상속 받아서 create를 오버라이드 한다.
38. 38
07
성능 개선
커스트 마이징
1) 잘 짜여진 스키마 설계
2) 적절한 Facet, Grouping 기능
3) Solrconfig.xml 에서 캐쉬 설정 튜닝
4) AutoCommit & MergeFactor 설정 튜닝
5) Replicaiton과 Shard을 이용한 확장 전략(CPU 코어 수맊큼의 샤드 운용)