관리 메뉴

개발자의 스터디 노트

루씬이 먼가요? 본문

자바/오픈소스(루씬)

루씬이 먼가요?

박개발씨 2022. 4. 19. 15:28

루씬은 자바로 개발된 고성능 정보검색 오픈소스 라이브러리 입니다. 1999년 하둡개발자로 잘 알려진 더그 커팅이 개발했고 2005년 아파치 톱 레벨 프로젝트로 승격됐습니다. 가장 유명한 무료 자바 IR 라이브러리 입니다.

 

IR이란?

 - Information Retrieval의 약자로, 사용자가 필요로 하는 정보를 수집하고 내용을 분석한 후 찾기 쉬운 구조로 만든 뒤 사용자 질의에 미리 만들어진 데이터에서 특정 정보를 찾아 제공하는 시스템 입니다. IR은 관리하는 모든 정보를 효율적으로 검색하도록 데이터 구조, 즉 색인을 만들고 관리합니다. 색인은 최단 시간에 필요한 정보의 위치를 찾도록 돕습니다.

 

루씬의 장점

 - 오픈소스

 - 적은 시스템 메모리 사용으로 대량의 데이터를 효율적으로 처리

 - 맞춤형 순위모델

 - 다양한 쿼리 유형 지원

 - 정교한 검색 지원

 - 필드별 정렬 지원

 - 실시간 색인 및 검색 지원

 - 그룹화 및 검색 결과에서 검색 용어 강조

 

루씬이 제공하는 두 가지 핵심 기능

1. 색인

 - 색인이란 검색엔진의 구조에 맞게 데이터를 저장하는 행위로, 그 결과물(데이터)도 색인이라고 합니다. 인덱스(Index)라고 부릅니다.

 

 - 역색인

  역색인은 텀(Term)이 키(Key)가 되는 색인 구조입니다. 즉, 역색인이란 페이지 중심의 데이터를 키워드 중심의 데이터 구조로 역으로 바꾸는것이라고 할 수 있습니다.

도큐먼트 위치 원본 도큐먼트
1 페이지 춘천의 옛길인 수레너미 고개를 넘어 서면으로 이어지는 이 길은 춘천의 역사와 만나는 길이다.
2 페이지 이곳은 춘천의 상징인 호수와 소양강 처녀상, 공지천 등을 만나며 산책로를 중심으로 가볍게 걸을 수 있다.
3 페이지 춘천의 아름다운 자연과 사람들을 잊지못해 아쉬운 눈물을 흘렸다고 한다.
4 페이지 …..

 

텍스트 분석기를 통해 데이터를 공백 단위로 쪼갠 결과는 다음과 같습니다.

춘천, 옛, 길, 수레너미, 고개, 넘, 서면, 이어지, 이, 길, 춘천, 역사, 만나, 길

 

이런식으로 텍스트를 분석한 결과는 아래와 같습니다.

도큐먼트 위치 원본 도큐먼트
1 페이지 춘천, 옛, 길, 수레너미, 고개, 넘, 서면, 이어지, 이, 길, 춘천, 역사, 만나, 길
2 페이지 이곳, 춘천, 상징, 호수, 소양, 강, 처녀, 공지, 천, 등, 만나, 산택, 로, 중심, 가볍, 걷, 수, 있
3 페이지 춘천, 아름답, 자연, 사람, 잊, 못하, 아쉽, 눈, 물, 흘리, 하
4 페이지 …..

위와 같이 저장되어 있는 구조를 정방향 색인 구조이고 역방향 색인구조로 데이터를 저장하면 아래와 같이 저장 할 수 있습니다.

Term 도큐먼트 위치
1, 34, 75, 86, 97
2, 405, 507, 700
고개 1, 568, 677, 898
공지 2, 25, 76, 89, 102
1, 6, 9, 87, 450, 600, 507
3, 6, 7, 68, 336, 876
…….
춘천 1, 2, 3, 8, 90
호수 2, 107, 765, 970

 

이 역색인 구조에서 '호수'를 찾으면 2, 107, 765, 970 페이지만 검색하면 됩니다. 정방향 구조는 1000페이지를 모두 검색해야 하지만 역색인 구조는 단 4번만 조회하면 호수가 들어간 모든 페이지를 찾을 수 있습니다. 역색인은 내부적으로 해시 테이블이나 이진 트리 자료구조를 사용합니다. 텀뿐 아니라 도큐먼트의 단어 위치같은 메타 데이터도 가지고 있습니다.

 

루씬 색인의 특징

 - 우수한 확장성과 고성능의 색인

 - 현대적 하드웨어에서 시간당 150GB이상 처리 가능

 - 작은 메모리 사용량 - 1MB 힙 메모리 요구

 - 색인이 늘어나도 배치 색인만큼 빠른 색인 가능

 - 텍스트 색인 시 색인 파일의 용량은 텍스트의 20 ~ 30% 수준

 

루씬 검색의 특징

 - 가장 적합한 결과를 상위에 반환하는 순위 검색 지원

 - 풍부하고 강력한 검색어 유형 제공(구문 쿼리(Pharse Queries), 와일드 카드 쿼리(Wildcard Queries), 근접 쿼리(Proximity Queries), 범위 쿼리(Range Queries) 등..)

 - 필드 검색 지원(예: 제목, 저자의 필드 등)

 - 어떠한 유형의 필드도 정렬(Sorting) 가능

 - 다중 색인 검색 지원

 - 동시 업데이트 및 검색 가능한 준 실시간 검색 제공

 - 유연한 그룹핑, 강조 표시, 조인 및 결과 그룹화 지원

 - 검색 속도가 빠르고 메모리 효율이 좋을 뿐 아니라 오타를 보정하는 자동완성 기능 제공

 - 벡터 공간 모델 및 Okapi BM25를 포함한 플러그인 형태의 검색 스코어링(Scoring) 모델 지원

 

* Okapi BM25란?

 - 주어진 검색 쿼리에 대한 문서의 관련성을 추정하기 위해 검색 엔진에서 사용하는 순위 기능입니다. 이것은 Stephen E. Robertson, Karen Spack Jones 등 이 1970년대와 1980년대에 개발 한 확률적 검색 프레임워크를 기반으로 합니다.

TF-IDF와 유사한 검색 기능을 나타냅니다.

https://en.wikipedia.org/wiki/Okapi_BM25

 

Okapi BM25 - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Not to be confused with Okapi. Ranking function used by search engines In information retrieval, Okapi BM25 (BM is an abbreviation of best matching) is a ranking function used by searc

en.wikipedia.org