Apache Lucene 이란? - 아파치 루씬에 대한 학습
ElasticSearch(엘라스틱서치)를 학습하려고 하는데 Apache Lucene(아파치 루씬)기반으로 이루어져있다는 내용을 보고 문득 아파치 루씬은 뭘까? 하고 궁금하여 자료를 찾아봤습니다. 세상에는 너무 많은 오픈소스가 존재하고 있었고, 이렇게 하나하나 모르는것을 알아가는 재미가 있는 것 같습니다.
아파치 루씬( Apache Lucene )은 뭘까?
아파치 루씬(Apache Lucene)은 Java언어로 이루어진 오픈 소스 형태의 정보 검색 라이브러리입니다. Hadoop(하둡) 개발자로 알려진 더그 커팅(Doug Cuting)에 의하여 개발되었으며 초창기에는 Java언어를 사용하여야 했지만, 추가적인 개발을 통하여 기존의 Java 언어 이외에 오브젝트 파스칼, 펄, C 샤프, C++, 파이썬, 루비, PHP 등 다른 프로그래밍 언어를 사용할 수 있도록 개발되었습니다. 이렇게 보면 '아파치 루씬은 그저 검색 소프트웨어(혹은 어플리케이션)?' 하고 생각할 수 있는데, 그것이 아니라 search application을 만드는데 사용하는 library입니다. 때문에 이 라이브러리를 기반으로 하여 아파치 쏠라 (Apache Solr) 혹은 엘라스틱서치(ElasticSearch)가 구동됩니다.
아파치 루씬( Apache Lucene )의 주요 기능 및 장점
전문 검색(Full Text) 색인 및 검색 기능을 필요로 하는 application에 적합하고 특히 웹 검색 엔진 및 로컬 단일 사이트 검색 구현에서의 유용성으로 널리 알려져 있습니다. 아파치 루씬은 1 - 2 MB 남짓의 Library에 들어있는 적은양의 Class들로 Search Application을 간단하게 구현할 수 있다는 것을 장점으로 꼽을 수 있습니다. 아파치 루씬은 색인과 검색기능을 제공하기 때문에 그 이외의 모든 것(문서 수집 및 Text 추출, 검색기능을 제공하는 서버, 사용자 인터페이스 등)을 개발자가 직접 구현해야 합니다. 아래 그림에서 진한 초록색의 부분을 아파치 루씬이 지운한다고 생각하면 이해하기 쉽습니다.
아파치 루씬은 두 가지의 핵심 기능을 제공하는데 색인과 검색 두 가지입니다. 검색 엔진의 구조에 맞게 데이터를 저장하는 행위, 혹은 그 결과물 자체인 데이터를 색인이라고 합니다. 루씬 색인의 특징은 우수한 확장성과 고성능의 색인, 시간당 150GB이상 처리 가능하고 작은 메모리 사용량 (1MB 힙 메모리 요구), 색인이 늘어나도 배치 색인만큼 빠른 색인이 가능하다는 점, 텍스트 색인 시 색인 파일의 용량은 텍스트의 20~30% 수준이라는점 등이 있습니다. 검색은 '사용자의 질의에 맞춘 적합한 도큐먼트를 색인에서 찾는 일' 로 정의할 수 있습니다. 루씬 검색의 특징으로는 가장 적합한 결과를 상위에 반환하는 순위 검색을 지원하는점, 풍부하고 강력한 검색어 유형을 제공하는 점 (Phrase Query, Wildcard Query, Proximity Query, Range Query 등), 필드 검색을 지원하는 점, 다중 색인 검색을 지원하는 점, 준 실시간 검색이 가능하다는 점(동시 업데이트 및 검색이 가능) 등이 있습니다.
아파치 루씬 ( Apache Lucene )의 색인과 검색과정
1. 필드를 가진 도큐먼트를 생성합니다.
2. IndexWriter 객체를 만들고 도큐먼트를 addDocument() 메소드를 사용하여 색인에 추가합니다.
3. QueryParser.parse()를 사용하여 문자열에서 쿼리를 생성합니다.
4. IndexSearcher를 생성하여 쿼리를 search() 메소드에 전달합니다.
참고사이트