2009-09-24 7 views
4

Lucene을 사용하여 응용 프로그램에 필터/검색 기능을 구현하고 싶습니다.Java : Lucene 출처 : 원래 객체

Lucene 색인을 쿼리하면 Hits 인스턴스가 표시되며 이는 나의 기준과 일치하는 Document의 목록 일뿐입니다.

내 객체에서 색인 된 Document을 생성 했으므로 특정 객체와 관련된 원래 객체를 찾는 가장 좋은 방법은 Document입니까?


내 상황의 더 나은 설명 : 지금은

  • 세 가지 모델 클래스 : Folder이 (가 할 수있는 다른 Folder s 또는 자식으로 List들), List (자식으로 Task들 수 있습니다) 및 Task (어린이가 다른 Task 일 수 있습니다). 그들은 모두 DefaultMutableTreeNode 하위 클래스입니다. 앞으로 에 Tag 엔티티를 추가하겠습니다.
  • Task에는 텍스트, 시작 날짜, 기한, 부울 플래그가 있습니다.
  • 이들은 JTree에 표시됩니다.
  • 홀 트리는 XML 파일에 저장됩니다.
  • 다음과 같은 작업을하고 싶습니다.
  • Task Google 검색과 비슷한 검색어가 있습니다.
  • 오늘부터 시작하는 Task을 모두 찾으십시오.
  • 필터 Tasks by Tag.
+0

귀하의 의견을 통해 나는 당신이하는 일을 조금 더 잘 이해할 수 있다고 생각합니다. Lucene으로 "색인이 생성 된"필드를 설명해 주시겠습니까? 조금 더 제공하는 UI를 설명해 주시겠습니까? 나는 당신이 트리를 가지고 있다고 가정하지만, 필드에 텍스트를 입력함으로써, 사용자는 라벨에 일치하는 리프 노드리스트를 얻을 수있다. 정확하니? 경기가 정확히 일치해야합니까? 형태소 분석 및 토큰 화와 같은 Lucene의 기능을 사용합니까? – erickson

답변

3

당신은 바닐라 루씬으로,하지 수 없습니다. 당신은 자신의 물건을 문서로 변환하고 Lucene에 문서를 저장했다고 말했습니까? 그 과정은 어떻게 되 돌릴 수 있다고 생각하십니까?

저장하고 루씬에 자신의 객체를 검색 할 경우

, 난 강력하게 대신 Compass를 사용하는 것이 좋습니다. Compass는 Lucene에게 Hibernate가 JDBC에 대해하는 것입니다 - 객체와 Lucene 문서 간의 매핑을 정의하면 Compass가 변환을 처리합니다.

+0

최대 절전 모드 검색은 관계형 데이터베이스에 대한 최대 절전 모드 정보를 검색하는 것입니다. 나는 Hibernate Search를 심도있게 조사하지 않았지만 나침반을 보았고, 나는 IndexReader 대신에 JDBC 기반의'Directory'를 구현함으로써 근본적인 설계 실수를 저질렀다고 생각한다. 나는 Compass의 사용을 정말로 꺼린다. – erickson

+0

Compass는 사용자가 선택한 Lucene 디렉토리를 사용할 수 있으며 JDBC 기반 JDBC는 하나의 옵션입니다. RAM 디렉토리와 FileSystem 디렉토리를 사용할 수도 있습니다. 그게 컴퍼스에 추천 된 근거라면, 당신은 잘못된 정보에 대해 그렇게 해왔습니다. – skaffman

+0

그리고 Hibernate Search는 Hibernate 데이터베이스를 색인하기위한 것이지 일반적인 인덱스 메커니즘이 아니다. Lucene (나침반)이 있습니다. – skaffman

3

개체 식별자가 들어있는 "저장된"필드를 추가하십시오. 각 히트마다 식별자를 통해 원본 객체를 검색합니다.

더 많은 내용을 알지 못하면 더 구체적으로 표현하기가 어렵습니다.

+0

예, 이렇게하는 것이 쉬운 방법입니다. 개체를 문서로 직렬화 한 다음 다시 만들면 좋겠지 만 이는 잘못된 디자인처럼 들릴 수 있습니다. –

+0

내 개체가 트리에 저장되기 때문에 내가 찾고있는 개체를 찾기 위해 구멍 트리를 걸어 가야합니다. 이것은 Lucene을 쓸모 없게 만들 것입니다. – Giuseppe

+0

거의 없습니다. Lucene은 정보 검색 시스템입니다. 데이터 구조는 키로 레코드를 효율적으로 조회하는 데 사용되는 것과 다릅니다. 나는 당신이 어떤 종류의 "Tree"를 가리키는 지 확신하지 못하지만, 전체 트리를 걷는 것이 아니라'java.util.TreeMap'을 의미한다면 O (log n) 룩업 (또는 O (1) lookup, 당신이'HashMap'으로 전환한다면). 디스크에서 B-Tree를 사용하면 비슷한 이야기가됩니다. Lucene은 토큰 화, 형태소 분석, 관련성 순위 지정 등과 같은 간단한 트리에서 사용할 수없는 많은 기능을 제공합니다. 그 차이가 분명하지 않은 경우 아마도 하나 또는 다른 것을 잘못 사용했을 것입니다. – erickson