LUCENE

검색엔진의 핵심요소

주제 1. LUCENE 개념과 소개

Lucene Library

  1. 확장 가능한 고성능 정보검색 라이브러리.
  2. Software 프로그램에 색인과 검색 기능을 간단하게 추가할 수 있다.
  3. Text 색인과 검색기능에 강점을 두는 Apache 라이선스의 오픈소스이다.
  4. 네이버 검색엔진에도 사용된다.

Lucene 공식 홈페이지에서의 소개글

Apache LuceneTM is a high-performance, full-featured text search engine library written entirely in Java. It is a technology suitable for nearly any application that requires full-text search, especially cross-platform.

Features

  • Sacalable, High-Performance Indexing
    • 1시간에 150GB 데이터 이상을 처리(검색)할 수 있다.
    • Heap Memory로 1MB 이상만 있어도 정상적으로 작동 가능하다.
    • Batch Indexing 만큼이나 빠른 인덱싱 속도를 보여준다.
  • Powerful Search Algorithm
    • Rank 기반의 Search결과(가장 최적의 결과 도출)
    • 다양한 Query 제공
    • Fielded Search(Metadata 검색 말하는듯…)
    • 어떤 Field라도 정렬 가능
    • Multiple index Search 가능
    • 동시다발적 Update와 Searching이 가능
    • 다양한 검색조건, Highlighting, join, grouping 가능
    • Memory-efficient / typo-tolerant
    • Configurable Storage Engine

정보검색기술(Information Retrieval)에 가장 근간이 되는 기술은 검색엔진(Search Engine)이다.

검색엔진은 크게 2개의 영역으로 나뉘어진다.
검색과정

  • 사용자로부터 검색 질의를 받아 분석&분리
  • 색인에서 분석된 단어들이 들어갔는지 검색
    색인과정
  • 타겟 문서에서 텍스트를 추출하여 분리
  • 해당 단어가 어떤 문서(Document)에 들어가있는지 자료구조 형성

그림으로 그려보면 이렇게 보여진다.

검색과정

해당 그림을 보면 Lucene이라고 박스를 해놓은 것이 있는데, 이 박스가 Lucene Library에서 지원해주는 기능 그 외 모든 기능과 흐름은 개발자가 직접 만들어주어야 한다.

그 중 가장 중요하고 어려운 일은 위에서 언급한 사용자의 검색 질의를 분석한다는 것.

나중에 깊게 다루겠지만 영어와 달리 한국어는 이 분석이라는 것이 세상에서 제일 어려운 언어이다. (네이버에서 이 분석 연구를 위해 언어학 전문가를 영입한다는 소문도…)

Written on September 2, 2020