KR101089722B1 - 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체 - Google Patents

프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체 Download PDF

Info

Publication number
KR101089722B1
KR101089722B1 KR20090117015A KR20090117015A KR101089722B1 KR 101089722 B1 KR101089722 B1 KR 101089722B1 KR 20090117015 A KR20090117015 A KR 20090117015A KR 20090117015 A KR20090117015 A KR 20090117015A KR 101089722 B1 KR101089722 B1 KR 101089722B1
Authority
KR
South Korea
Prior art keywords
node
hash
tree
index tree
prefix
Prior art date
Application number
KR20090117015A
Other languages
English (en)
Other versions
KR20110060428A (ko
Inventor
이용규
박미화
Original Assignee
동국대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 동국대학교 산학협력단 filed Critical 동국대학교 산학협력단
Priority to KR20090117015A priority Critical patent/KR101089722B1/ko
Publication of KR20110060428A publication Critical patent/KR20110060428A/ko
Application granted granted Critical
Publication of KR101089722B1 publication Critical patent/KR101089722B1/ko

Links

Images

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)

Abstract

프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체가 개시된다. 본 발명의 일 실시 예에 따른 프리픽스 트리 기반 색인 방법은 인덱스 트리에서 문자가 삽입될 제1노드를 검색하는 단계; 상기 제1노드가 포화 상태가 아니면 상기 문자를 상기 제1노드에 새로운 엔트리로 삽입하는 단계; 및 상기 제1노드가 포화 상태이면, 상기 문자와 상기 제1노드의 키값 및 자식 노드 포인터를 해시 버킷에 저장하여 상기 제1노드를 해시 테이블로 변환하는 단계를 포함한다.

Description

프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체 {Method and apparatus for prefix tree based indexing, and recording medium thereof}
본 발명은 대용량 텍스트 문서 집합에서 문자열을 빠르게 검색하기 위한 문자열 색인 방법 및 장치에 관한 것으로, 특히, 프리픽스 트리 기반 색인 방법, 그 기록 매체, 프리픽스 트리 기반 색인 장치에 관한 것이다.
본 발명은 한글/영어/한자 문서 검색 시스템에서 대용량 텍스트 문서를 문자열 색인을 이용하여 검색하는 기술과 관련된다. 문서 검색 시스템에서 문자열(한글 문자열, 한글 초성 중성 종성들의 스트링, 영어 알파벳 문자열, 한자 문자열, 또는 한자 부수들의 스트링 등)을 이용해서 검색하는 시스템에 관계된다.
한자 또는 한글 문자열을 기존 방법들과 같이 문자 단위로 프리픽스 트리 (Prefix tree) 기반 인덱스를 구축하면 트리의 각 노드에서의 분기(Branch) 수가 매우 많아질 수 있다. 예를 들어 상용 한자는 3500자이고 부수는 189개이므로, 한자 문자로 프리픽스 트리 기반 인덱스를 구축하는 경우 각 노드의 분기수가 매우 커질 수 있다. 한글 문자의 경우도 11,172개의 완성형 문자들이 존재하므로 프리픽스 트리 기반 인덱스에서 각 노드의 분기 수가 매우 커질 수 있다. 또한 색인 대상 인 문자열에 따라 각 노드의 분기수가 결정되므로, 노드마다 크기가 다를 수 있으며, 어느 노드의 크기는 매우 작고, 어느 노드의 크기는 매우 클 수 있다. 따라서 이 경우 고정 크기(Fixed size)의 노드를 사용하기가 어렵다. 만일 가변 크기(Variable Size)의 노드를 사용하더라도 크기가 큰 노드의 검색에는 많은 노력이 들게 된다. 또한 기존의 프리픽스 트리 기반 인덱스에서 색인 대상인 문자열의 크기는 모두 다르므로, 프리픽스 트리 기반 인덱스의 깊이(높이)도 리프 노드마다 모두 다를 수 있다. 어느 문자열의 크기(문자 수)가 매우 큰 경우에는 문자열의 문자수 만큼 노드들을 검색해야 하므로 검색시간이 많이 걸리게 된다.
본 발명이 이루고자 하는 첫 번째 기술적 과제는 프리픽스 트리 기반 인덱스의 크기가 지나치게 커지는 것을 방지하고 검색 성능을 최적화시킬 수 있는 프리픽스 트리 기반 색인 방법을 제공하는 데 있다.
본 발명이 이루고자 하는 두 번째 기술적 과제는 상기의 프리픽스 트리 기반 색인 방법을 컴퓨터 시스템에서 실행하기 위한 프로그램이 기록된 매체로서, 컴퓨터 시스템이 판독할 수 있는 기록매체를 제공하는 데 있다.
본 발명이 이루고자 하는 세 번째 기술적 과제는 정보 검색 시스템에서 프리픽스 트리 기반 인덱스의 크기가 지나치게 커지는 것을 방지하고 검색 성능을 최적화시킬 수 있는 프리픽스 트리 기반 색인 장치를 제공하는 데 있다.
본 발명의 일 실시 예에 따른 프리픽스 트리 기반 색인 방법은 인덱스 트리에서 문자가 삽입될 제1노드를 검색하는 단계; 상기 제1노드가 포화 상태가 아니면 상기 문자를 상기 제1노드에 새로운 엔트리로 삽입하는 단계; 및 상기 제1노드가 포화 상태이면, 상기 문자와 상기 제1노드의 키값 및 자식 노드 포인터를 해시 버킷에 저장하여 상기 제1노드를 해시 테이블로 변환하는 단계를 포함한다.
또한, 본 발명의 다른 실시 예에 따른 프리픽스 트리 기반 색인 방법은 상기 인덱스 트리의 루트부터 시작하여 검색 대상 문자열의 키값들을 해당키의 포인터를 따라가면서 상기 인덱스 트리에서 깊이 우선으로검색하는 단계; 검색 중인 노드가 해시 함수를 이용한 노드라고 판단되면, 상기 검색된 노드의 해시 값들에 따라 자식 노드 포인터를 찾는 단계; 및 상기 자식 노드 포인터에 따른 단말 노드에서 데이터를 추출하는 단계를 포함한다.
본 발명의 일 실시 예에 따른 프리픽스 트리 기반 색인 장치는 인덱스 트리를 저장하는 메모리부; 상기 인덱스 트리에서 문자가 삽입될 제1노드를 검색하는 노드 검색부; 및 상기 제1노드가 포화 상태가 아니면 상기 문자를 상기 제1노드에 새로운 엔트리로 삽입하고, 상기 제1노드가 포화 상태이면 상기 문자와 상기 제1노드의 키값 및 자식 노드 포인터를 해시 버킷에 저장하여 상기 제1노드를 해시 테이블로 변환하는 인덱스 트리 갱신부를 포함한다.
본 발명의 실시 예들에 의하면, 프리픽스 트리 기반 인덱스의 크기가 지나치게 커지는 것을 방지하고 검색 성능을 최적화시킬 수 있다.
이이하에서는 도면을 참조하여 본 발명의 바람직한 실시 예를 설명하기로 한다. 그러나, 다음에 예시하는 본 발명의 실시 예는 여러 가지 다른 형태로 변형될 수 있으며, 본 발명의 범위가 다음에 상술하는 실시 예에 한정되는 것은 아니다.
이하의 실시 예들은 한글 및 한문 문서, 영문 문서와 같은 대용량 문서 검색 시스템에서 문자열 검색을 위한 해싱을 이용한 프리픽스(Prefix) 트리 색인 구축 및 검색 방법을 제공한다.
본 발명의 실시 예들은 프리픽스 트리 기반 인덱스를 이용해서 인덱스를 구 축하며, 각 노드의 크기를 고정 크기로 유지한다. 만일 어느 노드에 저장된 엔트리들의 크기(노드의 문자들의 수)가 노드의 최대 크기를 넘게 되면 해싱(Hashing)을 사용하여 노드를 해시 테이블로 변환한다.
인덱스 트리를 구축하기 위해서는 먼저, 색인 대상 문자열을 문서에서 추출해야 한다. 색인 대상 문자열은 프리픽스 트리 기반 인덱스의 루트 노드부터 해당 노드까지의 모든 문자들을 연결한 스트링이다. 문서에서 검색에 사용될 문자열을 추출한다. 검색할 때 사용되는 기본 단위로 문장, 어절, 어구, 또는 단어 등을 선택할 수 있다. 필요에 따라, 문서에서 구두점(마침표, 쉼표, 물음표, 느낌표 등)과 특수문자(괄호, 인용부호) 등을 공백으로 치환한 후 문자열을 추출할 수 있다. 이 경우, 문자열을 추출할 때는 검색 대상을 단어로 선택한 경우 공백을 기준으로 구분하고, 문장을 선택한 경우에는 전 과정에서 구두점을 기준으로 구분한다. 또는 키워드 사전이나 문자열 사전을 활용하여 문자열을 추출할 수도 있다. 필요에 따라, 추출된 문자열에서 공백을 모두 삭제할 수도 있다. 문자열 추출 방법은 다양한 공지의 기술들 중에서 선택하여 사용할 수 있다. 또한 추출된 문자열들 중에서 색인 대상 문자열을 선택할 수 있다. 이후, 색인 대상 문자열을 구성하는 문자들을 분석하여 적절한 크기의 노드 크기를 정한다. 다음 각 필드의 크기, 최대 분기수 m의 크기를 정한다. 여기서, 분기수 m은 프리픽스 트리 기반 인덱스의 최대 분기수가 되며, 프리픽스 트리 기반 인덱스는 m원 트리가 된다.
도 1은 본 발명의 일 실시 예에 따른 인덱스 트리의 예를 도시한 것이다. 도 1은 각 노드의 구조를 보여준다. 도 1의 노드 구조는 어느 문자열의 부분 문자열에 대한 색인을 지원한다. 또한 특정 문자열의 색인을 위해서는 특정 문자열이 다른 문자열들과 구별되는 특정 문자열의 프리픽스(즉 특정 문자열의 처음부터 다른 문자열들과 구별되는 위치까지의 부분 문자열)를 인덱스 트리에 삽입하는 것이 효율적이다.
m이 최대 분기수일 때, 해시 플래그(Hash Flag, 110)가 1이면 노드에 m개를 초과하는 엔트리를 저장하는 경우(즉, 오버플로가 발생한 경우)이다. 해시 플래그(110)가 1인 노드는 노드 엔트리들을 해싱한 노드이다. 해시 플래그(110)가 0이면 해싱하지 않은 일반 노드를 나타낸다.
압축 플래그(120)가 1이면 자식 노드들을 자신의 노드에 저장한 상태를 나타내고, 0이면 압축하지 않은 일반 노드를 나타낸다.
문자열 빈도(130)는 해당 노드까지의 문자열(루트 노드부터 해당 노드까지의 문자(키)들의 스트링)이 문서들에서 나타난 빈도를 나타낸다.
문자열 리스트 포인터(140)는 해당 문자열이 나타난 문서들에서의 모든 위치들을 저장한 리스트에 대한 포인터이다.
(키, 자식 노드 포인터) 리스트는 최대 m개의 (키, 자식 노드 포인터) 필드 쌍들을 나타낸다. 키(151)는 문자를 나타내고, 자식 노드 포인터(152)는 키에 해당되는 자식 노드의 포인터이다.
본 발명은 도 1에 도시된 노드의 구조에 한정되지 않으며, 본 발명이 적용될 수 있는 노드의 구조는 환경에 따라 달라질 수 있다.
도 2는 도 1의 인덱스 트리에 새로운 문자들이 삽입되는 경우 오버플로우가 발생하는 것을 도시한 것이다.
모든 노드는 키값과 자식 노드에 대한 포인터의 쌍들을 저장한다. 그런데, 문자열을 트리에 차례로 삽입할 때 일부 문자가 포화(Full) 상태인 노드에 삽입되는 경우, 오버플로가 발생하게 된다. 도 2의 예에서, "可憐生(가련생)"을 삽입할 노드(可에 해당되는 노드)는 이미 삽입할 공간이 없으므로 오버플로가 발생하게 되어 해시 함수를 이용한 해싱이 필요하다.
도 3은 본 발명의 일 실시 예에 따른 프리픽스 트리 기반 색인 장치(300)의 블록도이다.
노드 검색부(310)는 메모리부(320)의 인덱스 트리에서 문자가 삽입될 노드(이하 '제1노드')를 검색한다.
메모리부(320)는 미리 구축된 인덱스 트리를 저장한다. 메모리부(320)는 D램과 같은 휘발성 메모리 소자나 하드 디스크 드라이브, 플래시 메모리와 같은 비휘발성 메모리 소자 중 적어도 하나를 포함한다.
인덱스 트리 갱신부(330)는 제1노드가 포화 상태가 아니면 삽입할 문자를 제1노드에 새로운 엔트리로 삽입한다. 인덱스 트리 갱신부(330)는 제1노드가 포화 상태이면 삽입할 문자와 제1노드의 키값 및 자식 노드 포인터를 해시 버킷에 저장하는 방식으로 제1노드를 해시 테이블로 변환한다.
본 발명의 다른 실시 예에서, 인덱스 트리 갱신부(330)는 인덱스 트리의 노드들을 순회하면서 현재 노드 및 자식 노드의 통합 가능 여부를 검사한다. 이 실시 예에서, 인덱스 트리 갱신부(330)는 현재 노드 및 자식 노드가 통합 가능한 경우 자식 노드의 엔트리들을 현재 노드에 통합하면서 현재 노드의 압축 플래그를 변경한다.
도 4는 본 발명의 일 실시 예에 따른 프리픽스 트리 기반 색인 방법의 흐름도이다.
먼저, 인덱스 트리에서 문자가 삽입될 제1노드를 검색한다(S410). 즉, 인덱스 트리에서 문자를 삽입할 위치를 찾는다.
다음, 제1노드가 포화 상태이면(S420) 삽입할 문자와 제1노드의 키값 및 자식 노드 포인터를 해시 버킷에 저장하는 방식으로 제1노드를 해시 테이블로 변환한다(S430). 예를 들어, 제1노드에서 오버플로가 발생하면 해시 플래그를 1로 변경하고 위 해시 함수를 이용해 m + 1개의 엔트리를 재배치한다.
반면, 제1노드가 포화 상태가 아니면(S420) 삽입할 문자를 제1노드에 새로운 엔트리로 삽입한다(S440). 예를 들어, 해당 노드의 해시 플래그가 0이고 노드가 포화 상태가 아니면 새로운 엔트리를 삽입한다.
마지막으로, 인덱스 트리에 모든 문자열이 삽입되었는지 확인(S450)하고, 모든 문자열이 삽입되지 않았으면 다음으로 삽입할 문자에 대해 제1노드를 검색하는 과정(S410)부터 상술한 과정을 반복한다.
도 5는 도 2에서 특정 노드를 해시 테이블로 변환한 경우를 도시한 것이다.
해시 버킷에는 노드에 저장되었던 (키, 자식 노드 포인터) 쌍들이 저장된다. 해시 함수가 사용된 노드는 해시 플래그를 1로 설정하고 상기 노드의 해시 테이블을 저장한다. 즉, 해시 코드의 길이(160), 해시 비트 위치(예를 들어, 12, 13, 15)(171, 172, 173), 해시 코드의 크기(180), 각 해시 코드에 대한 해시 버킷 포인터(190)를 저장한다.
해시 함수는 문자의 코드값을 기반으로 해시키를 생성한다. 해시함수의 입력값은 오버플로가 발생한 노드에 저장된 키값과 새로 입력되는 키값을 포함한 모든 키값이 된다. 해당 키(문자)들의 코드(예를 들어, 한글완성형 코드는 16비트, ASCII 코드는 8비트)를 분석하고 문자를 유일하게 구별하거나 또는 구별성이 높은 비트들을 선택하여 해시 코드를 구성한다. 이는 특정 노드의 해시 버킷들을 가능한 균등하게(즉, 버킷들의 엔트리 수가 가능한 동일하게) 사용하기 위해서이다. 만일 해시 버킷들을 균등하게 사용하지 않으면 효율성이 떨어지게 된다.
16비트 문자에 대해 해시코드의 길이가 3이고 해시 비트 위치가 앞부터 12, 13, 15일 경우 해시 테이블의 예는 표 1과 같다.
해시 코드 해시 코드에 해당하는 문자 코드 해시 버킷 포인터
000 XXXXXXXXXXX00X0X 0X000000ff
001 XXXXXXXXXXX00X1X 0X0000ff00
010 XXXXXXXXXXX01X0X 0X000f0000
011 XXXXXXXXXXX01X1X 0X00f00000
100 XXXXXXXXXXX10X0X 0X0f000000
101 XXXXXXXXXXX10X1X 0Xf0000000
110 XXXXXXXXXXX11X0X 0X0000000f
111 XXXXXXXXXXX11X1X 0X000000f0
만일 해시 버킷들이 연속된 공간을 사용하는 경우에는 해시 버킷 포인터는 모든 버킷의 주소들을 저장하지 않고 시작 버킷의 주소만 저장하면 된다. 해시 코드의 크기는 문자들을 구별하는데 사용되는 비트들의 수이다. 해시 코드의 크기는 해시 버킷들의 수를 결정한다(해시 코드 크기가 b이면 해시 버킷의 개수는 2b). 해시 코드는 해당 비트들의 값(비트 스트링)으로 구성된다. 예를 들어, 오버 플로가 발생한 노드의 모든 키값과 자식 노드 포인터를 해시 버킷들에 모두 저장할 수 있도록 해시 버킷의 수를 정할 수 있다.
여기서는 각 해시 버킷의 크기는 노드의 크기와 동일하다고 가정(다르게 설정할 수도 있다)한다. 최초의 오버플로에서는 m+1 개의 키와 자식 노드 포인터들을 저장할 수 있는 버킷의 개수로부터 시작한다. 노드의 일부를 버킷으로 사용하여 공간을 절약할 수도 있다. 따라서 노드의 일부 공간을 버킷으로 활용할 경우 모든 엔트리들(m+1 게의 쌍)을 저장하는데 추가로 필요한 버킷의 수는 1개일 수도 있으며, 해당 노드의 모든 엔트리들이 해시 키에 의해 구분되어 저장될 수 있는 크기로 결정된다. 해시 코드가 결정되면, 오버플로가 발생한 노드의 모든 엔트리들을 해시 함수를 이용해서 재구성한다. 각 노드마다 해시 키의 길이와 해시 함수, 해시 테이블의 크기, 버킷의 수가 달라질 수 있다.
한편, 해시 함수를 이용하는 노드에서 해시 버킷에 엔트리들이 계속해서 삽입되면 해시 버킷에서도 오버플로가 발생할 수 있다. 이때는 오버플로 해결 방법의 일례로 해시 버킷의 수를 2배로 늘려서 오버플로를 해결할 수 있다. 이에 따라서 해시 코드의 크기도 1씩 증가하게 된다. 본 발명의 다른 실시 예에서, 해시 버킷에 오버플로가 발생한 경우, 오버플로 영역을 할당하여 오버플로 처리를 할 수 있다. 다른 다양한 오버플로 처리 방법을 사용할 수도 있다.
도 6은 도 3에서 인덱스 트리 갱신부(330)가 인덱스 트리를 압축한 예를 도시한 것이다.
도 6에서는 어느 노드에 저장된 엔트리들의 크기(노드의 문자들의 수)가 작은 경우에는 자손 노드들까지 자기 노드에 포함시키는 압축 방법을 보여준다.
프리픽스 트리 기반 해시 인덱스를 구축한 후에는 균형 트리(리프노드들간의 레벨의 차가 적은 트리)로 만드는 것이 바람직하다. 불균형 트리(리프노드들간의 레벨의 차가 큰 트리)가 되면 검색 성능이 떨어지기 때문이다.
트리 압축을 위해, 트리를 순회하면서 현재 방문한 노드와 그의 모든 자식 노드들의 크기를 조사한다. 하나의 노드로 통합할 수 있으면 통합한다. 즉, 부모 노드와 모든 자식 노드들이 하나의 노드로 통합될 수 있다. 통합되는 노드들의 엔트리들을 현재 방문한 노드에 삽입하고 엔트리 포인터들을 조정하면 압축 과정이 완료된다. 이 과정을 반복하여 트리의 순회가 끝날 때까지 압축을 계속한다. 따라서 트리의 순회 과정에서 어느 노드의 자식 노드들이 상기 노드에 압축되고, 압축된 자식 노드의 자식 노드들을 상기 노드에 다시 압축하는 과정을 반복하여, 상기 노드의 일부 또는 모든 자손 노드들이 상기 노드로 압축될 수도 있다.
압축된 노드(이하 '압축 노드')는 플래그(121, 122)로 표시하여 압축되지 않은 노드와 구별한다. 트리 순회 방식은 트리의 레벨오더(Level Order), 프리오더(PreOrder), 포스트오더(PostOrder) 순회 방식 등을 사용할 수 있다.
상술한 압축 방법을 트리의 순회를 통해 반복하면 어느 노드를 루트 노드로 하는 서브트리 모두가 하나의 노드로 통합될 수도 있다. 트리 압축을 트리가 구축된 후 실시하거나, 또는 트리의 구축 후에 문자열의 삽입과 삭제가 발생하는 경우에는 트리의 압축을 일정 주기로 수행하여 트리가 적정 성능을 유지할 수 있도록 관리할 수 있다.
복수개의 노드들이 압축되어 있는 압축 노드에 새로운 엔트리가 삽입되어 오버플로가 발생하면, 새로운 엔트리 삽입에 필요한 공간 확보를 위해 압축을 해제할 노드를 선택하여 압축 해제하고, 압축 해제된 노드를 트리에 삽입한다. 또는 압축 노드의 복수개의 노드들을 중 일부(적어도 하나)를 선택하여 압축을 해제함으로써 새로운 엔트리 삽입에 필요한 공간을 확보할 수도 있다. 한편 두 개의 노드가 압축된 압축 노드의 경우에 하나의 노드의 압축이 해제되면 모든 압축이 해제되게 된다.
도 7은 도 1에서 엔트리를 삭제하는 과정의 상세 흐름도이다.
먼저, 엔트리의 삭제가 요청되면 삭제가 요청된 엔트리가 속한 노드(이하, '제2노드')를 검색한다(S760). 삭제 요청된 엔트리는 노드의 엔트리일 수도 있고 해시 버킷의 엔트리일 수도 있다.
다음, 제2노드에서 삭제가 요청된 엔트리를 삭제한다(S770). 삭제가 요청된 엔트리가 해시 버킷의 엔트리이면 해당 해시 버킷에서 엔트리를 삭제한다. 만일 삭제되는 엔트리가 해시 버킷의 마지막 엔트리이고 해당 버킷의 자식 노드들이 존재하지 않는다면 해당 버킷을 삭제할 수도 있다.
이때, 제2노드가 해시 함수를 이용한 노드인 경우(S781), 제2노드의 전체 엔트리의 수가 사전 설정된 임계값 미만이면(S782), 제2노드의 전체 엔트리로부터 추출된 문자들을 이용하여 제2노드를 재구성한다(S783). 재구성으로 인해 해시 버킷의 수가 줄어들게 되고 해시 코드의 비트 수가 줄어들 수 있다. 엔트리의 삭제로 인해 해시 버킷들의 모든 엔트리들이 하나의 노드에 저장 가능하다면 해시 버킷들을 일반 노드로 변환할 수 있다. 예를 들어, 노드의 해시 플래그를 0으로 설정하고 해시 버킷들의 전체 엔트리들을 노드에 재배치한다.
한편, 제2노드가 해시 함수를 이용한 노드가 아니고 제2노드에 남아있는 엔트리가 없다면(S781, S784), 제2노드의 부모 노드에서 제2노드에 대한 링크를 삭제한다(S785). 예를 들어, 삭제되는 엔트리가 리프 노드의 마지막 엔트리이고 해당 노드의 자식 노드들이 존재하지 않는다면 해당 노드 자체를 삭제할 수 있다.
도 8은 본 발명의 다른 실시 예에 따른 프리픽스 트리 기반 색인 방법의 흐름도이다.
먼저, 인덱스 트리의 루트부터 시작하여 검색 대상 문자열의 키값들을 해당키의 포인터를 따라가면서 인덱스 트리를 깊이 우선으로 검색한다(S810). 루트 노드부터 시작하여 문자열을 구성하는 각 문자의 키를 순서대로 검색하여 (즉, 문자열의 j번째 문자를 루트 노드로부터 j번째의 노드에서 비교) 해당 키의 포인터를 따라가면서 검색한다.
다음, 검색 중인 노드가 해시 함수를 이용한 노드라고 판단되면(S820), 검색된 노드의 해시 값들에 따라 자식 노드 포인터를 찾는다(S830). 검색 중인 노드가 해시 함수를 이용한 노드인지 판단하기 위해, 각 노드의 해시 플래그를 검사할 수 있다. 예를 들어, 해시 플래그가 0이면 노드의 레벨 L(1 ≤ L)을 문자열의 자리수 p(즉 L=p)로 하고 이에 해당하는 문자(검색하는 문자열의 p번째 문자)를 이용해서 노드를 탐색한다. 해시 플래그가 1이면 해당 노드에서 해시 함수를 이용한 키값의 비교를 통해 엔트리를 찾고 자식 노드 포인터를 따라 탐색을 계속한다.
만일 검색 중인 노드가 압축 노드일 때는 압축 노드에 포함된 노드들 중에서 해당 노드를 선택하여 검색하면 된다.
다음, 단말 노드 또는 내부(비단말) 노드 중에서 찾고자 하는 문자열의 키값이 포함된 목표 노드에 도달하면(S840), 데이터를 추출한다(S850). 검색 문자열의 길이(문자 수)만큼 노드들을 루트 노드로부터 각 노드를 탐색하면서 문자열을 찾지 못하거나 또는 검색 문자열을 찾으면 검색 과정을 종료한다. 문자열의 검색 중 검색 키(문자)에 해당되는 노드의 검색에서 상기 노드에 검색 키가 존재하지 않을 때는 검색을 종료할 수 있으며, 검색 문자열을 찾지 못한 경우에는 검색 실패로 처리한다. 보다 구체적으로, 이 과정(S850)은 자식 노드 포인터가 가리키는 노드가 내부 노드인 경우, 단말 노드 또는 찾고자 하는 문자열의 키값이 포함된 내부 노드가 나올 때까지 자식 노드 포인터가 가리키는 다음 노드로 이동하는 과정을 포함한다. 반면, 찾고자 하는 문자열의 키값이 포함된 노드에 도달하지 못하면(S840), 인덱스 트리 검색 과정을 계속하여 수행한다.
본 발명은 소프트웨어를 통해 실행될 수 있다. 바람직하게는, 본 발명의 실시 예들에 따른 프리픽스 트리 기반 색인 방법 및 프리픽스 트리 기반 색인 방법을 컴퓨터에서 실행시키기 위한 프로그램을 컴퓨터로 읽을 수 있는 기록매체에 기록하여 제공할 수 있다. 소프트웨어로 실행될 때, 본 발명의 구성 수단들은 필요한 작업을 실행하는 코드 세그먼트들이다. 프로그램 또는 코드 세그먼트들은 프로세서 판독 가능 매체에 저장되거나 전송 매체 또는 통신망에서 반송파와 결합된 컴퓨터 데이터 신호에 의하여 전송될 수 있다.
컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록 장치를 포함한다. 컴퓨터가 읽을 수 있는 기록 장치의 예로는 ROM, RAM, CD-ROM, DVD±ROM, DVD-RAM, 자기 테이프, 플로피 디스크, 하드 디스크(hard disk), 광데이터 저장장치 등이 있다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 장치에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
본 발명은 도면에 도시된 일 실시 예를 참고로 하여 설명하였으나 이는 예시적인 것에 불과하며 당해 분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 실시 예의 변형이 가능하다는 점을 이해할 것이다. 그리고, 이와 같은 변형은 본 발명의 기술적 보호범위 내에 있다고 보아야 한다. 따라서, 본 발명의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해서 정해져야 할 것이다.
본 발명은 프리픽스 트리 기반 인덱스의 크기가 지나치게 커지는 것을 방지하고 검색 성능을 최적화시킬 수 있는 것으로, 정보 검색 시스템의 단말, 서버 등에 적용될 수 있다.
도 1은 본 발명의 일 실시 예에 따른 인덱스 트리의 예를 도시한 것이다.
도 2는 도 1의 인덱스 트리에 새로운 문자들이 삽입되는 경우 오버플로우가 발생하는 것을 도시한 것이다.
도 3은 본 발명의 일 실시 예에 따른 프리픽스 트리 기반 색인 장치의 블록도이다.
도 4는 본 발명의 일 실시 예에 따른 프리픽스 트리 기반 색인 방법의 흐름도이다.
도 5는 도 2에서 특정 노드를 해시 테이블로 변환한 경우를 도시한 것이다.
도 6은 도 3에서 인덱스 트리 갱신부(330)가 인덱스 트리를 압축한 예를 도시한 것이다.
도 7은 도 1에서 엔트리를 삭제하는 과정의 상세 흐름도이다.
도 8은 본 발명의 다른 실시 예에 따른 프리픽스 트리 기반 색인 방법의 흐름도이다.

Claims (13)

  1. 문서에 포함된 키워드 또는 인덱싱할 문장의 프리픽스에 따라 인덱스 트리를 관리하는 방법에 있어서,
    정보 검색 시스템이 메모리부에 저장된 상기 인덱스 트리에서 문자가 삽입될 제1노드를 검색하는 단계;
    상기 제1노드가 포화 상태가 아니면 상기 정보 검색 시스템이 상기 문자를 상기 제1노드에 새로운 엔트리로 삽입하는 단계; 및
    상기 제1노드가 포화 상태이면, 상기 정보 검색 시스템이 상기 문자와 상기 제1노드의 키값 및 자식 노드 포인터를 해시 버킷에 저장하여 상기 제1노드를 해시 테이블로 변환하는 단계를 포함하는, 프리픽스 트리 기반 색인 방법.
  2. 제 1 항에 있어서,
    엔트리의 삭제가 요청되면, 상기 정보 검색 시스템이 삭제가 요청된 엔트리가 속한 제2노드를 검색하는 단계; 및 상기 정보 검색 시스템이 상기 삭제가 요청된 엔트리만 삭제하는 단계를 더 포함하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 방법.
  3. 제 2 항에 있어서,
    상기 제2노드가 해시 함수를 이용한 노드가 아니고 상기 제2노드에 남아있는 엔트리가 없다면, 상기 정보 검색 시스템이 상기 제2노드의 부모 노드에서 상기 제2노드에 대한 링크를 삭제하는 단계를 더 포함하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 방법.
  4. 제 2 항에 있어서,
    상기 제2노드가 해시 함수를 이용한 노드인 경우, 상기 제2노드의 전체 엔트리의 수가 임계값 미만이면, 상기 정보 검색 시스템이 상기 제2노드의 전체 엔트리로부터 추출된 문자들을 이용하여 상기 제2노드를 재구성하는 단계를 더 포함하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 방법.
  5. 제 1 항에 있어서,
    상기 제1노드에 삽입하는 단계 및 상기 제1노드를 해시 테이블로 변환하는 단계는
    상기 제1노드의 해시 플래그를 검사하여 상기 제1노드가 해시 함수를 이용한 노드인지 판단하는 단계를 포함하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 방법.
  6. 제 1 항에 있어서,
    상기 제1노드가 해시 함수를 이용한 노드이면서 포화 상태이면, 상기 정보 검색 시스템이 상기 해시 버킷의 수를 증가시켜 상기 프리픽스 문자를 해시 버킷에 저장하는 단계를 더 포함하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 방법.
  7. 문서에 포함된 키워드 또는 인덱싱할 문장의 프리픽스에 따라 인덱스 트리를 검색하는 방법에 있어서,
    정보 검색 시스템이 메모리부에 저장된 상기 인덱스 트리의 루트부터 시작하여 검색 대상 문자열의 키값들을 해당키의 포인터를 따라가면서 상기 인덱스 트리에서 깊이 우선으로 검색하는 단계;
    검색 중인 노드가 해시 함수를 이용한 노드라고 판단되면, 상기 정보 검색 시스템이 상기 검색된 노드의 해시 값들에 따라 자식 노드 포인터를 찾는 단계; 및
    상기 정보 검색 시스템이 상기 자식 노드 포인터에 따른 단말 노드에서 데이터를 추출하는 단계를 포함하는, 프리픽스 트리 기반 색인 방법.
  8. 제 7 항에 있어서,
    상기 데이터를 추출하는 단계는
    상기 자식 노드 포인터가 가리키는 노드가 내부 노드인 경우, 단말 노드가 나올 때까지 상기 자식 노드 포인터가 가리키는 다음 노드로 이동하는 단계를 포함하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 방법.
  9. 제 7 항에 있어서,
    상기 자식 노드 포인터를 찾는 단계는
    상기 인덱스 트리를 깊이 우선으로 검색하면서 각 노드의 해시 플래그를 검사하여 해당 노드가 해시 함수를 이용한 노드인지 판단하는 단계를 포함하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 방법.
  10. 제1항 내지 제9항 중 어느 한 항의 방법을 컴퓨터 시스템에서 실행하기 위한 프로그램이 기록된, 컴퓨터 시스템이 판독할 수 있는 기록매체.
  11. 정보 검색 시스템에서 문서에 포함된 키워드 또는 인덱싱할 문장의 프리픽스에 따라 인덱스 트리를 관리하는 장치에 있어서,
    상기 인덱스 트리를 저장하는 메모리부;
    상기 인덱스 트리에서 문자가 삽입될 제1노드를 검색하는 노드 검색부; 및
    상기 제1노드가 포화 상태가 아니면 상기 문자를 상기 제1노드에 새로운 엔트리로 삽입하고, 상기 제1노드가 포화 상태이면 상기 문자와 상기 제1노드의 키값 및 자식 노드 포인터를 해시 버킷에 저장하여 상기 제1노드를 해시 테이블로 변환하는 인덱스 트리 갱신부를 포함하는, 프리픽스 트리 기반 색인 장치.
  12. 제 11 항에 있어서,
    상기 인덱스 트리 갱신부는
    상기 인덱스 트리의 노드들을 순회하면서 현재 노드 및 자식 노드의 통합 가능 여부를 검사하고, 통합 가능한 경우 상기 자식 노드의 엔트리들을 상기 현재 노드에 통합하면서 상기 현재 노드의 압축 플래그를 변경하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 장치.
  13. 제 12 항에 있어서,
    상기 인덱스 트리 갱신부는
    복수개의 노드들이 압축되어 있는 압축 노드가 포화 상태에서 새로운 엔트리가 삽입되는 경우, 상기 복수의 노드 중 적어도 일부의 노드를 압축 해제한 후, 상기 압축이 해제된 노드를 상기 인덱스 트리에 삽입하는 것을 특징으로 하는, 프리픽스 트리 기반 색인 장치.
KR20090117015A 2009-11-30 2009-11-30 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체 KR101089722B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR20090117015A KR101089722B1 (ko) 2009-11-30 2009-11-30 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR20090117015A KR101089722B1 (ko) 2009-11-30 2009-11-30 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체

Publications (2)

Publication Number Publication Date
KR20110060428A KR20110060428A (ko) 2011-06-08
KR101089722B1 true KR101089722B1 (ko) 2011-12-07

Family

ID=44395202

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20090117015A KR101089722B1 (ko) 2009-11-30 2009-11-30 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체

Country Status (1)

Country Link
KR (1) KR101089722B1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109710833B (zh) * 2018-12-29 2021-07-16 上海蜜度信息技术有限公司 用于确定内容节点的方法与设备
CN111339382B (zh) * 2020-03-11 2023-09-22 腾讯科技(深圳)有限公司 字符串数据检索方法、装置、计算机设备及存储介质
CN117194440B (zh) * 2023-11-08 2024-02-13 本原数据(北京)信息技术有限公司 数据库索引压缩方法、装置、电子设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
"Hashed B-트리 인덱스를 이용한 효율적인 무결성 검사", 박선섭 외 2명, 정보과학회논문지 데이타베이스 제27권 제2호, 2000년 6월
"SGML 정보 검색 인덱스 설계를 위한 K-ary 트리, 문서 단위 구문 트리와 엘리먼트 단위 구문 트리의 비교", 손정한 외 3명, 한국정보과학회 학술발표논문집, 1998년 10월
"최대키 값을 이용한 CST-트리 인덱스의 빠른 재구축", 한국컴퓨터종합학술대회 2005 논문집 Vol.32, No.1(B), 2005년

Also Published As

Publication number Publication date
KR20110060428A (ko) 2011-06-08

Similar Documents

Publication Publication Date Title
Martínez-Prieto et al. Practical compressed string dictionaries
US9195738B2 (en) Tokenization platform
US8838551B2 (en) Multi-level database compression
JP3149337B2 (ja) システム生成辞書を用いたデータ圧縮のための方法及びシステム
US7756859B2 (en) Multi-segment string search
US10498357B2 (en) Method, apparatus, system, and computer program product for data compression
US7526497B2 (en) Database retrieval apparatus, retrieval method, storage medium, and program
CN102867049B (zh) 一种基于单词查找树实现的汉语拼音快速分词方法
US10671586B2 (en) Optimal sort key compression and index rebuilding
JP2016522524A (ja) 同義表現の探知及び関連コンテンツを検索する方法及び装置
KR20070049664A (ko) 토큰스페이스 저장소와 함께 사용하기 위한 멀티-스테이지질의 처리 시스템 및 방법
US8266150B1 (en) Scalable document signature search engine
JP4237813B2 (ja) 構造化文書管理システム
KR101089722B1 (ko) 프리픽스 트리 기반 색인 방법 및 장치, 그 기록 매체
Flor A fast and flexible architecture for very large word n-gram datasets
KR100999408B1 (ko) 해시트리를 이용한 url 검색방법
CN114780502A (zh) 基于压缩数据直接计算的数据库方法、系统、设备和介质
Navarro et al. Practical indexing of repetitive collections using relative Lempel-Ziv
Belazzougui et al. Compressed string dictionary look-up with edit distance one
CN109657108B (zh) 一种域名资产数据存储和查询方法和系统
Belazzougui et al. Compressed string dictionary search with edit distance one
JP2007133682A (ja) 全文検索システム、及び、その全文検索方法
Petri et al. Efficient indexing algorithms for approximate pattern matching in text
Boytsov Super-linear indices for approximate dictionary searching
KR102013839B1 (ko) 데이터베이스 관리 방법, 시스템 및 데이터베이스 트리 구조

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20141121

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151027

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161102

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171103

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20181031

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20191105

Year of fee payment: 9