루씬 파일 포멧 두번째 강좌에서 .fnm파일을 설명하다가 FieldBits에 대한 설명을 얼렁뚱땅 해버려서 다시 자세히 설명한다.
FieldBits
가장 낮은 비트는 인덱스 여부 저장
두번째 비트 term vector 저장 여부
세번째 비트 term positions 저장 여부
네번째 비트 term offsets 저장 여부
세번재, 네번째 비트를 왜 저장하는지 몰랐느데 겨우 알아넸다.
결론적으로는 세번째 비트는 구문질의나 스팬질의를 위한 정보를 저장하기 위함이고, 네번째 비트는 검색어 하이라이팅을 위한 정보를 가지고 있다.
그럼 position이라는 용어와 offset라는 용어는 루씬에서 어떻게 사용되는지 알아보자.
간단하게 그림으로 그려봤다. (이건 Lucene in Action에서 가져온 그림이다. ^^;)
position은 이전 토큰(token)과 현재 토큰의 상대적인 증가값을 나타내며, offset은 텀의 길이정보를 알기 위해 대부분 저장이 되고, 실제로 Term Vector 파일에 저장될 때에는 상대적인 offset의 시작 위치와 offset길이 정보까지 해서 두가지의 VInt값이 저장이 된다.
불행하게도 term position과 term offsets의 정보들이 정확히 어디에 저장이 되는지는 루씬 인덱스 파일 포멧 문서에 나와 있지 않다.
그래서 정보를 추가해 본다.
<구조 요약>
Field (.tvf) –> TVFVersion<NumTerms,NumDistinct, ,Bits ,TermFreqs>^NumFields<각 인자별 자료형 정의>
TVFVersion –> IntNumTerms –> VInt
NumDistinct –> VInt — 나중에 쓰일 예정임Bits –> Byte — 추가된 부분
TermFreqs –> <TermText, TermFreq, Position?, Offsets?>^NumTermsTermText –> <PrefixLength, Suffix>
PrefixLength –> VInt
Suffix –> String
TermFreq –> VInt
Positions –> VInt
Offsets –> VInt(시작정보), Vint(길이정보)
파란글자로 쓰여 있는게 내가 추가한 내용이다.
앞으로 다양한 질의 기능을 위해 텀 벡터 영역은 많은 정보가 추가가 될 듯 하다.
Lucene에서 Position과 offset에 대한 설명 과 그 밖의 추가들 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.