2. Lucene
SOLR
Lucene은 확장 가능한 고성능 정보검색(IR, Information Retrieval) 라
이브러리이다.
Apache Lucene 프로젝트에 기반을 둔 오픈소스 검색엔진
Solr 란?
3. Solr의 주요기능1
Full-text search
높은 웹 트래픽을 감당할 수 있도록 최적화.
XML, JSON과 HTTP등의 표준 오픈 인터페이스를 제공 (Restful-API)
HTML 기반의 관리자 인터페이스
Linearly scalable(=수평확장), auto index replication (=복제),
자동 failover(=장애조치)와 복구
유연하고 강력한 XML파일 기반의 설정 환경
확장가능한 플러그인 아키텍처
(=한글형태소 또는 자소분해, 사용자정의 토큰나이저 & 필터 개발가능)
4. Solr의 주요기능2
- 일반 문자열을 비롯 Numberic 타입, 다이나믹 필드, 유니크 키 지원
- Lucene 쿼리 랭퀴지 확장지원
- 검색과 필터링 지원
- Geospatial 위치기반 검색 지원 (예) 반경 2Km 이내 검색 등..
- 성능 최적화, 캐시지원
- 로그 모니터링
- 실시간(Near Real-time) 증분 색인과 색인 복제(replication)지원
- 분산 검색과 다중 호스트간 샤드(sharded) 지원
- 데이터베이스와 XML 파일 그리고 HTTP를 이용한 다양한 색인방식 지원
- Apache Tika를 이용한 다양한 형식의(=PDF, Word, HTML 등) 문서 색인
5. 검색시스템 인덱싱 구조 (DataImportHandler 방식)
SOLR 색인서버
기업정보
채용정보
인재검색
Database View Or SP CALL Solr 증분 색인
Curl 호출 반영
LIVE Data
CORE
인덱스 로그 테이블
Solr index Data
Delta-Import
Full-Import
Data Import
Crontab에 shell script 배치작업 자동화
6. Replication 방식의 분산처리
Service server2Service server1Index server
인덱스 서버 검색 서버1
Replication
Replication
검색 서버2
Load Balancer
응답(XML/JSON 리턴)
플랫폼 : 리눅스 (CentOS), WAS (Tomcat)
요청 (GET)
7. Solr 환경설정
1. SolrConfig 설정
- Cache
- Replication
- DataImportHandler 설정
2. Schema 설정
- 스키마 필드리스트 설정 (type, indexed, stored, required, multivalued 등)
- UniqueKey 설정
- 한글형태소, 자소등 커스텀 type Analyer 설정
3. Data-Config.xml 설정
- Query
- DeltaImportQuery
- deltaQuery
- deletePkQuery
10. ASP용 Solr client 개발
1) 다음파일 Include
- Solr_GlobalSearch.asp (Solr Helper 클래스)
- Solr_JSON_Helper.asp (Jscript용 JSON파서)
2) Call Solr_JSON_Helper() ‘서브프로시저 호출
3) 일반쿼리 예
Set srchHandler = New Solr_SearchHandler
srchHandler.init 아이피, 포트, WAS, 코어명
srchHandler.setQuery "쿼리“
srchHandler.setDefaultOp “AND”
srchHandler.setSortField “score DESC”
srchHandler.setStart 0
srchHandler.setRows 20
srchHandler.setResultField “Job_Title,Job,JOB_CONTENT”
'결과받기
Set searchData = ParseJSON(srchHandler.getResults())
totalCnt = searchData.response.numFound
Set itemSet = searchData.response.docs
4) setQuery 생성예
(Title:자바 And -Title:부산 And Content:채용)^1.5
http://www.solrtutorial.com/solr-query-syntax.html
11. 패싯쿼리 예
5) 패싯쿼리 예
Set srchHandler = New Solr_SearchHandler
srchHandler.init 아이피, 포트, WAS, 코어명
srchHandler.setQuery ”쿼리”
srchHandler.setFacetSort ”소팅”
srchHandler.setStart 0
srchHandler.setRows 0
srchHandler.setResultField ””
'패싯정보
srchHandler.setFacet "true"
srchHandler.setFacetField “필드명"
srchHandler.setFacetMinCount 1
srchHandler.setFacetNamedList "arrarr"
'결과받기
Set searchData = ParseJSON(srchHandler.getResults())
totalCnt = searchData.response.numFound
Set itemSet = searchData.response.docs
12. 확장플러그인 개발 및 구축
- 아리랑 한글형태소 기반 분석기 적용
- 자동완성 기능을 위한 한글 자소분해(초성,중성,종성,복모음)
- 한글 자소분석기를 통한 DB Like 검색처럼 적용가능 (=주소록 검색등)
- N그램 토크나이저 (예) 분당자바개발 -> 분당|당자|자바|바개|개발
- CODE 기반 카테고리 검색설계 (PatternTokenizerFactory)
예)
13. 키워드 품질 개선 및 사전구축
1. Default Operator : “AND” , Exact Match등 정밀도 향상
- 파이썬개발자 : “파이썬” AND “개발자”
2. Query-Time Boost 적용
- (title:자바)^1.5 (body:자바)
3. Index-Time Boost 적용 (Data Import xml설정)
- transformer="script:boost_up“
- <field column="$docBoost" />
- row.put('$docBoost',boost_num);
4. 사전구축을 통해 검색기능 향상
- 확장사전, 동의어, 복합명사 사전작업을 통한 향상된 의미기반 키워드 분해
14. 서버 및 Tomcat튜닝
- GC로그, Out of Memory error Heap Dump 설정
- 충분한 JVM Heap 메모리 확보 (가용메모리의 50% 설정)
- 빠른 디스크 IO (퓨전IO, SSD등)
17. 초기구축 후 트러블슈팅
1. 디스크가 꽉 찼을때 색인실패
- 데이터 갱신이 안되고, replication 오동작
- 디스크 확보 후 index파일을 삭제 후 재색인
- 과거 log가 정기적으로 지워질 수 있도록 쉘스크립트 배치
2. Facet쿼리시 키워드 쿼리에 “*” 가 들어갔을때 서버 부하발생
- Load Average가 평균 1~2 -> 9이상으로 급격히 증가하는 문제발생
으로 패치