2011-01-28 5 views
0

가능합니까? 데이터 객체를 통해서만 데이터베이스에 직접 액세스 할 수 있습니다. 항목이 ArrayList와 같은 것으로 반환되는 경우 색인을 검색 할 수 있습니까?Java에서 데이터 객체를 사용하는 데이터베이스의 저장소 색인

이것이 가능하지 않은 경우 Lucene (또는 다른 도구)을 사용하여 java를 사용하여 객체에 대해 퍼지 매칭을 수행 할 수있는 방법이 있습니까?

예를 들어 Person 및 FirstName이있는 Person 개체가 있습니다. 이름에 퍼지 일치를하고 싶습니다. 그래서 Person 객체 x 개의 배열을 가지고 있는데, 각각의 Person 객체를 루핑하고 이름을 비교하는 효율적인 방법이 있을까요?

답변

0

데이터 객체를 가져 와서 별도의 Lucene 색인을 작성하여 필요한 필드를 저장하십시오. Person 예제를 사용하면 모든 Lucene 문서는 [Id, FirstName, LastName]이됩니다. 이 인덱스를 검색하면 데이터베이스에 전체 데이터 오브젝트를 조회하는 데 필요한 ID가 리턴됩니다.

실제 색인 작성은 쉽습니다. 데이터 오브젝트 목록을 검색하여 반복하고, Lucene. 서를 생성하고, IndexWriter를 사용하여 저장해야합니다. 영구 저장을위한 파일 시스템 디렉토리 나 메모리 내 저장 장치에 대해 작업 할 수 있습니다.

0

그게 가능한 해결책은 이지만 FSDirectory (프로젝트 사양에서 허용하지 않음)에 내 색인을 저장할 수없고 RAMDirectory의 경우 수천 개의 Person 개체가 필요합니다. 검색을 통해 인 메모리 저장 장치가이 상황에 이상적인지 여부는 알 수 없습니다.

많은 종류의 데이터에 효율적으로 사용할 수있는 퍼지 일치 알고리즘이 있습니까?

+0

나는 대답에 대한 답이라고 생각합니다. 수천 개의 문서가 Lucene의 경우에는 문제가되지 않으며 각각 1kb의 문서 만 10MB의 메모리 만 남아 있습니다. 어떤 fzzu 알고리즘을 사용할 지 알지 못하지만, Levensthein 거리에서 퍼지 (fuzzy) 매치를 허용하는 BKTree 구조를 조사하고 싶을 수도 있습니다. – sisve