Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Solr development case

207 Aufrufe

Veröffentlicht am

Solr development case

Veröffentlicht in: Daten & Analysen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Solr development case

  1. 1. Solr 검색엔진구축 및 서비스 운영/개발 최 일 규 2016-04-25 기준
  2. 2. Lucene SOLR Lucene은 확장 가능한 고성능 정보검색(IR, Information Retrieval) 라 이브러리이다. Apache Lucene 프로젝트에 기반을 둔 오픈소스 검색엔진 Solr 란?
  3. 3. Solr의 주요기능1 Full-text search 높은 웹 트래픽을 감당할 수 있도록 최적화. XML, JSON과 HTTP등의 표준 오픈 인터페이스를 제공 (Restful-API) HTML 기반의 관리자 인터페이스 Linearly scalable(=수평확장), auto index replication (=복제), 자동 failover(=장애조치)와 복구 유연하고 강력한 XML파일 기반의 설정 환경 확장가능한 플러그인 아키텍처 (=한글형태소 또는 자소분해, 사용자정의 토큰나이저 & 필터 개발가능)
  4. 4. Solr의 주요기능2 - 일반 문자열을 비롯 Numberic 타입, 다이나믹 필드, 유니크 키 지원 - Lucene 쿼리 랭퀴지 확장지원 - 검색과 필터링 지원 - Geospatial 위치기반 검색 지원 (예) 반경 2Km 이내 검색 등.. - 성능 최적화, 캐시지원 - 로그 모니터링 - 실시간(Near Real-time) 증분 색인과 색인 복제(replication)지원 - 분산 검색과 다중 호스트간 샤드(sharded) 지원 - 데이터베이스와 XML 파일 그리고 HTTP를 이용한 다양한 색인방식 지원 - Apache Tika를 이용한 다양한 형식의(=PDF, Word, HTML 등) 문서 색인
  5. 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. 6. Replication 방식의 분산처리 Service server2Service server1Index server 인덱스 서버 검색 서버1 Replication Replication 검색 서버2 Load Balancer 응답(XML/JSON 리턴) 플랫폼 : 리눅스 (CentOS), WAS (Tomcat) 요청 (GET)
  7. 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
  8. 8. 카테고리 화면 Facet 쿼리 및 Filter 쿼리 적용예
  9. 9. 상품 및 일반리스트 화면 상품리스트 및 소팅 적용예
  10. 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. 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. 12. 확장플러그인 개발 및 구축 - 아리랑 한글형태소 기반 분석기 적용 - 자동완성 기능을 위한 한글 자소분해(초성,중성,종성,복모음) - 한글 자소분석기를 통한 DB Like 검색처럼 적용가능 (=주소록 검색등) - N그램 토크나이저 (예) 분당자바개발 -> 분당|당자|자바|바개|개발 - CODE 기반 카테고리 검색설계 (PatternTokenizerFactory) 예)
  13. 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. 14. 서버 및 Tomcat튜닝 - GC로그, Out of Memory error Heap Dump 설정 - 충분한 JVM Heap 메모리 확보 (가용메모리의 50% 설정) - 빠른 디스크 IO (퓨전IO, SSD등)
  15. 15. Solr 캐시확인 (HttpWatch)
  16. 16. 유지관리 (Solr 서버 Health Check) 모바일 Push 알림
  17. 17. 초기구축 후 트러블슈팅 1. 디스크가 꽉 찼을때 색인실패 - 데이터 갱신이 안되고, replication 오동작 - 디스크 확보 후 index파일을 삭제 후 재색인 - 과거 log가 정기적으로 지워질 수 있도록 쉘스크립트 배치 2. Facet쿼리시 키워드 쿼리에 “*” 가 들어갔을때 서버 부하발생 - Load Average가 평균 1~2 -> 9이상으로 급격히 증가하는 문제발생 으로 패치
  18. 18. Analyzer? Analyzer Tokenizer N개 TokenFilter= +
  19. 19. Suggest (Prefix 방식) Indexing 아버지= ㅇㅏㅂㅓㅈㅣ ㅇㅂㅈ Query Prefix Query=
  20. 20. Suggest (Edge n-Gram 방식) Indexing 아버지 = ㅇ ㅇ Query Match Query= ㅇㅏ ㅇㅂ ㅇㅏㅂ ㅇㅂㅈ
  21. 21. 감사합니다.

×