2011-11-08 7 views
0

어쨌든 50-100GB의 텍스트 행을 색인화 한 다음 빠른 정규식 검색을 수행 할 수있는 방법은 무엇입니까? 한 줄씩가는 것보다 적어도 빠릅니다. 정규 표현식 패턴이 항상 동일하지 않으므로 색인을 작성할 때이를 고려할 수 없습니다.빠른 정규식 검색

Lucene으로 이와 같은 것을 달성 할 수 있습니까? 접미어 트리를 사용하는 것이 가능할 수도 있지만 인덱스는 너무 많은 메모리 (100GB보다 훨씬 많은 메모리)를 사용합니다.

답변

1

당신이해야 할 주요한 일은 사전에 일반적인 검색 용어를 확인한 다음 그에 기초하여 색인을 생성하는 것입니다.

예를 들어 "Foo"로 시작하는 줄에 대한 검색이 많이있을 것으로 예상 할 수 있습니다. 그런 다음 미리 검색을 실행하고 "Foo"로 시작하는 줄 목록을 저장할 수 있습니다. 그런 다음 누군가가 "Foobar"로 시작하는 줄을 검색하면 검색 할 줄의 하위 집합을 이미 좁혔습니다.

진정으로 영리 해지기를 원하면 일반적인 검색을 프로그래밍 방식으로 분석하여 되풀이 검색 구성 요소를 찾은 다음 해당 공통 구성 요소를 기반으로 색인을 생성 할 수 있습니다.

+0

비슷한 접근법을 설명하는 기사도 있습니다. 그것은 k- 그램 (그 줄에서 k 연속 문자마다)을 색인하는 것입니다. 문제는 검색에 임의의 수의 문자가 포함될 수 있으며 모든 k-gram을 인덱싱하는 것은 너무 많은 메모리를 차지한다는 것입니다. 어쨌든 이것은 시험 할만한 가치가 있습니다. – user16367