본문으로 바로가기

[Lucene] 루씬 indexing #1 - 기본

category 개발이야기/Lucene & Solr 2019. 10. 10. 21:33
반응형

루씬의 기본 동작은 indexing과 searching 입니다.

word든 xml이든, txt이든 csv든 간에 먼저 text로 만든 다음에 이를 검색하기 좋도록 index를 만들고 이를 이용하여 검색을 진행합니다.


Inverted Indexing

Lucene은 빠른 전문 검색(Full Text Serach)를 하기 위하여 inverted index를 생성하여 사용합니다.
Lucene 관련 공식문서나, 기타 문서들을 찾아보면 inverted index라는 용어를 많이 사용하는데, 말 그대로 일반적인 index의 key와 value를 뒤집어 놓은 형태입니다.

말보단..
사진이 빠릅니다.

먼저 책상의 개발서적중 아무거나 하나를 꺼냅니다.
(저는 최근 가장 재밌게본 "다시 미분적분"의 책을 꺼내서 사진을 찍었습니다)
그리고 거의 첫부분과 맨 마지막 부분을 보면 아래와 같은 목차와 찾기 페이지를 볼수 있습니다.

  

책 초반에 나오는 목차가 index라면 맨뒤의 "찾아보기" 페이지는 inverted index 입니다.

lucene에서는 이처럼 단어(Term)와 이를 포함하는 document id를 Key,Value로 갖는 형태의 inverted index를 생성합니다.

당연히 inverted index가 단어로 검색하기엔 좋겠죠?


Indexing

일단 Text를 받으면 아래와 같은 단계로 Inverted index를 생성합니다.
1.Token scan
- 주어진 Text를 띄어쓰기 단위로 분리합니다.
ex) "아버지가 방에 들어가신다" -> "아버지가" "방에" "들어가신다"

2. Token Analysis (이는 Analysis를 어떤걸 쓰냐에 따라 달라집니다.)
- 불용어나 조사등을 떼고 원형을 만듭니다.
ex) ""아버지", "방", "들어가다"

3. Frequency counting
- 해당 단어가 몇번 반복되는지를 Hash table에 저장합니다. (이는 검색시 ranking을 정할때 사용됩니다.)

4. Sort
- 검색이 용이하도록 정렬합니다. (Quick sort and Merge Sort)

5. Encoding
- 디스크에 저장할때 용량을 줄이기 위해 encoding을 하며, Delta encoding을 사용합니다.(기준값과 차이값을 이용하여 압축)



반응형