Lucene을 사용하여 데이터베이스의 테이블을 인덱싱하려고합니다. 색인 생성을 위해 Lucene을 사용하고 필드는 저장되지 않습니다. 위에서 언급 한 표에는 5 개의 열 (사용자 ID (PK), 설명, 보고서 번호, 보고서 유형, 보고서)이 있습니다.Lucene 인덱싱 및 검색
Lucene이 히트를 발견하면 데이터베이스에서 데이터를 다시 가져 오기 위해 userid, reportnumber 및 report type의 조합을 사용하려고합니다.
테이블의 레코드 하나는 예를 들어 여러 행에 걸쳐있을 수 있습니다.
JQ123, SOMEDESCRIPTION 1, FIN, 핀 보고서의 내용
JQ123, AnotherDescription, 2, 수학, 수학 보고서의 내용
JQ123, YetAnotherDesc, 3, 수학, 다른 수학 보고서의 내용
JD456, MoreDesc , 1, STAT, 통계 보고서 내용 ...
일부 보고서 유형 예 (MATH)는 고도로 구조화 된 내용 (XML, 마지막 열에 문자열로 저장 됨)을 가지고 있으며 나중에 내용의 일부인을 문서의 일부로 채울 수 있습니다.
지금까지 모든 행에 대해 Lucene 문서를 작성하고 색인을 생성하는 전략이있었습니다. 그 뒤에있는 나의 생각은 1입니다. 간단하고 논리적으로 보입니다 (내게) 2. 특정 문서 유형에서 내용을 추출하여 필드에 입력하면 결국 필요한 것은 보고서 형식이 인지 확인하고 이러한 새 필드를 만드는 if 문입니다. 여기에 관련 코드는 다음과 같습니다
public void createDocument(){
Document luceneDocument=new Document();
luceneDocument.add(new Field("userid", userID, Field.Store.NO, Field.Index.NOT_ANALYZED));
luceneDocument.add(new Field("reportnumber", reportNum, Field.Store.NO, Field.Index.NOT_ANALYZED));
luceneDocument.add(new Field("reporttype", reportType, Field.Store.NO, Field.Index.NOT_ANALYZED));
luceneDocument.add(new Field("description", description, Field.Store.NO, Field.Index.ANALYZED));
luceneDocument.add(new Field("report", report, Field.Store.NO, Field.Index.ANALYZED));
if(reporttype.equalsIgnoreCase("MATH"){
luceneDocument.add(new Field("more fields", field content, Field.Store.NO, Field.Index.ANALYZED));
}
indexwriter.add(luceneDocument)
indexwriter.close
}
1 같은 기록을 어떤 방식으로 루씬의 검색 효율에 영향을 미치는 다른 문서를 가지고 있습니까? (나는 어떤 필드를 저장하지 않는 ) 루씬에서 레코드 당 하나의 문서를 가지고 비교했을 때
2이 방법은 머리를 통해 상당한 디스크 공간이겠습니까?
미리 답변 해 주셔서 감사합니다.