Solr 기능
• Schema
– 색인할 문서의 필드와 그 필드 타입을 쉽게 정의
– Lucene의 Analyzer 사용
– Dynamic Field를 지원
– Copy Field를 사용하여 여러 field를 검색 가능한 단일 field로 묶을 수 있음
– 외부 파일을 통해 금지어 등을 설정할 수 있다.
• Query
– HTTP 인터페이스로 XML/XSLT, JSON, Python, Ruby 와 같은 응답 포멧 설정
– 쿼리와 필드 값에 근거한 Faceted Search 제공
– query로 검색 정렬을 정의 가능
– 용이한 검색 score 설정
– query에 특정 field에 대한 가중치 부여 가능
• Core
– query handler와 확장 가능한 XML format
– unique key field에 기반하여 중복 문서 탐지
• Caching
– query 결과, 필터, 문서에 대한 캐시 설정
– 사용자 수준에서의 캐시 설정 지원
• Replication
– rsync transport를 통해 효과적인 분산 색인
• Admin Interface
– cache, update, query 상태를 알려줌.
– Text Analyzer에 대한 디버거 제공
– 웹 쿼리 인터페이스 제공
2
설정 파일
1. solr 디렉토리에 solr.xml 설정파일 수정
<solr persistent="true" sharedLib="lib">
<cores adminPath="/admin/cores" defaultCoreName=“core1">
<core name=“core1" instanceDir=“core_dir1" />
<core name=“core2" instanceDir=“core_dir2" />
</cores>
</solr>
2. solr 디렉토리에 core의 홈 디렉토리 생성
- solr
- core_dir1
- core_dir2
3. 생성한 각 디렉토리에 conf와 data 디렉토리를 생성한다. data 경로는
solrconfig.xml에서 아래와 같은 부분에서 설정할 수 있다.
<dataDir>${solr.data.dir:}</dataDir>
- solr
- core_dir1
- conf
- data
- core_dir2
- conf
- data
14
Web Admin Interface
• Config, Schema, Distribution 정보 조회
• Query Interface
• 각종 통계
– Caches: lookups, hits, hitratio, inserts, evictions, size
– RequestHandlers: requests, errors
– UpdateHandler: adds, deletes, commits, optimizes
– IndexReader, open-time, index-version, numDocs, maxDocs
• Analysis Debugger
– 각 분석 단계에 대한 결과를 보여줌
– 쿼리와 색인에 대한 매치에 대한 정보를 보여줌
16
Index
• 기존 데이터를 모두 지움
$ java -Durl=http://localhost:$port/solr/update/?commit=true
-Ddata=args -jar $dir/post.jar "<delete><query>*:*</query></delete>"
• 다음과 같이 post.jar 파일을 이용하여 색인함
$ java -Durl=http://localhost:8983/solr/core1/update/?commit=true -jar post.jar core1_data.xml
$ java -Durl=http://localhost:8983/solr/core2/update/?commit=true -jar post.jar core1_data.xml
※ 주의
– 처음 색인 파일 생성시
<doc>
<field name="id">id1</field>
<field name=“title“>title1</field>
</doc>
– 색인 파일 갱신시
<update>
<doc>
<field name="id">id1</field>
<field name=“title“>title1</field>
</doc>
</update>
28
Search Parameter
Parameter Default Description
q 검색 쿼리. 예) q=video 혹은 q=title:spiderman^10 text:spiderman
start 0 검색된 결과 리스트에 대한 Offset
rows 10 반환될 결과 문서 수
반환될 필드 (필드명은 comma로 구분)
fl *
예) fl=*,score 혹은 fl=id, name
qf 결과로써 제공받을 필드 지정. 예) q=superman&qf=title subject
오름/내림차순으로 검색할 필드 지정
sort
예) sort=inStock asc, price desc 혹은 sort=price asc
wt Writer type. 예) wt=json 혹은 wt=xml
필터 쿼리 지정 (결과내 검색 기능)
fq
예) q=video&fq=superman
hl 하이라이트 필드 지정. 예) hl=true&hl.fl=name, description
Faceted Search
facet 예) facet=true&facet.field=cat
facet.query=price:[0 TO 100]&facet.query=price:[100 TO *]
debugQuery 검색결과에 debug 결과를 추가해 보여줌
30
31.
Query Examples
• mission이나 impossible이 포함되고 releaseDate로 내림차순 검색
– q=mission impossible; releaseDate desc
• mission을 포함하고actor에 cruise가 포함되지 않은 문서를 검색
– q=+mission –actor:cruise
• mission impossible이 붙고, actor에 cruise가 포함되지 않은 문서 검색
– q=“mission impossible” –actor:cruise
• title에 spiderman을 description의 spiderman보다 10의 가중치 부여
– q=title:spiderman^10 description:spiderman
• description필드에서 spiderman과 movie가 10단어 이내의 문서 검색
– q=description:“spiderman movie”~10
• HDTV를 반드시 포함하고 weight이 40 이상인 문서를 검색
– q=+HDTV +weight:[40 TO *]
• Wildcard queries
• q=te?t
• q=te*t
• q=test*
31