Wednesday, December 31, 2014

Apache Solr

  1. Solr 소개
    1. REST 형식의 API를 사용하는 독립적 엔터프라이즈 검색 서버
    2. XML, JSON, CSV 혹은 HTTP 위 바이너리로 인덱싱을 진행
    3. HTTP GET 요청으로 검색
    4. XML, JSON, CSV 혹은 바이너리 결과를 반환
  2. Solr 특징
    1. 고급 Full-Text 검색 능력
    2. 다량의 웹 트래픽을 위한 최적화
    3. XML, JSON과 HTTP 등 오픈 인터페이스 기반 표준
    4. 종합적인 HTML 관리자 인터페이스
    5. 모니터링을 위한 서버 통계
    6. 선형 확장, 자동 인덱스 복사, 자동 대체와 복구
    7. 근 실시간 인덱싱
    8. XML 설정으로 유연성과 적응성을 제공
    9. 확장가능한 플러그인 아키텍처
  3. 사용 설명

    1. 설치 및 실행
      1. Java 1.7 이상 필요
      2. wget http://apache.mirror.cdnetworks.com/lucene/solr/4.9.0/solr-4.9.0.tgz
      3. tar -xvf solr-4.9.0.tgz
      4. cd solr-4.9.0/
      5. cd example/
      6. java -jar start.jar &
      7. 아래 주소를 통하여 Solr Admin에 접속
      8. http://211.49.227.178:8983/solr (211.49.227.178 대신 정확한 IP로 대체)
      9. 아래 그림은 Solr Admin 화면


    2. 데이터 인덱싱
      1. cd exampledocs/
      2. 아래 명령어를 통하여 solr.xml과 monitor.xml를 인덱싱
      3. java -jar post.jar solr.xml monitor.xml
      4. 아래 방법으로 solr 단어를 검색
      5. Core Selector -> collection1 -> Query -> q에 solr 입력 -> wt에서 xml 선택 -> Execute Query
      6. 혹은 아래 http 요청으로 직접 검색
      7. http://211.49.227.178:8983/solr/collection1/select?q=solr&wt=xml
      8. 아래 명령어로 exampledocs에 있는 모든 xml 파일 인덱싱
      9. java -jar post.jar *.xml
    3. 데이터 갱신
      1. 'java -jar post.jar solr.xml monitor.xml'와 'java -jar post.jar *.xml' 명령어로 solr.xml과 monitor.xml를 두번 인덱싱 하였지만 중복으로 인덱싱되지 않고 후에 인덱싱한 내용으로 대체
      2. 이는 인덱싱함에 있어 'id'라는 유니크한 키를 사용하기 때문이며 데이터 갱신은 이런 형식으로 진행
    4. 데이터 삭제
      1. 아래 명령어로 id가 SP2514N인 문서를 삭제
      2. java -Ddata=args -Dcommit=false -jar post.jar "<delete><id>SP2514N</id></delete>"
      3. 아래 명령어로 name에 DDR 단어가 포함된 문서를 삭제
      4. java -Dcommit=false -Ddata=args -jar post.jar "<delete><query>name:DDR</query></delete>"
      5. 위 삭제 명령어에서 -Dcommit=false 옵션을 사용하였기에 아래 명령어로 커밋하여야 문서를 검색하지 못함
      6. java -jar post.jar -
      7. 이렇게 하는 원인은 커밋하는 작업이 비싸기에 모든 작업을 한번에 커밋하는 것을 추천하기 때문
    5. 데이터 검색
      1. 아래 요청으로 video 관련 문서에서 name과 id 필드만 반환
      2. http://211.49.227.178:8983/solr/collection1/select/?indent=on&q=video&fl=name,id
      3. 아래 요청으로 video 관련 문서의 모든 내용을 반환
      4. http://211.49.227.178:8983/solr/collection1/select/?indent=on&q=video&fl=*
      5. 아래 요청으로 video 관련 문서에서 name, id 및 price를 필드를 반환하는데 price 내림 순으로 정렬
      6. http://211.49.227.178:8983/solr/collection1/select/?indent=on&q=video&sort=price%20desc&fl=name,id,price
      7. 아래 요청으로 video 관련 문서를 JSON으로 반환
      8. http://211.49.227.178:8983/solr/collection1/select/?indent=on&q=video&wt=json
      9. 아래 요청으로 video 관련 문서를 inStock 오름 순과 price 내림 순으로 반환
      10. http://211.49.227.178:8983/solr/collection1/select/?indent=on&q=video&sort=inStock%20asc,%20price%20desc
      11. 아래 요청처럼 함수 사용 가능
      12. http://211.49.227.178:8983/solr/collection1/select/?indent=on&q=video&sort=div(popularity,add(price,1))%20desc
  4. 참고 자료

    1. http://lucene.apache.org/solr/index.html
    2. http://wiki.apache.org/solr/

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.