2013-06-01 3 views

답변

0

독자적으로 색인 리더와 작성기를 사용하여 해결되었습니다. 그것이 적절한 방법인지 몰라요. 필드는 문자열 필드 (저장된) 였으므로이 경우에는 방금 작업했습니다.

IndexReader reader = IndexReader.open(...); 
IndexWriter writer = new IndexWriter(...); 

for(int i = 0; i < reader.maxDoc(); i++) { 
    if(reader.isDeleted(i)) continue; 
    Document d = reader.document(i); 
    Document d2 = new Document(); 
    for(Field f : (List<Field>)d.getFields()) { 
     Field f2 = f; 
     if(f.name().equals(FIELD_NAME)) 
      f2 = new Field(FIELD_NAME, f.stringValue(), Field.Store.YES, Field.Index.NOT_ANALYZED); 
     d2.add(f2); 
    } 
    writer.addDocument(d2); 
} 

writer.optimize(); 
writer.close(); 
+0

사용자는 문서의 저장된 필드 만 가져옵니다. 인덱싱되었지만 저장되지 않은 필드는이 방법을 사용하면 손실됩니다. 이는 귀하의 경우에는 문제가되지 않지만 대량의 내용이 많은 큰 입력란에 대해서만 색인을 생성하는 것이 일반적입니다. 지식을 위해서 – femtoRgon

+0

이 그런 경우에 유효한 접근법이 있습니까? – fferri

+1

인덱스 작성 방법을 제어 할 수있는 경우 해당 필드를 인덱싱 대상으로 변경하십시오. 인덱스 빌드 프로세스를 제어하지 않으면 수행중인 작업과 매우 유사하지만 검색과 관련하여 보조 인덱스로 유지하고 기본 인덱스에 적절한 레코드에 대한 포인터를 저장합니다 (NOT a DocId). 인덱스에서 저장되지 않은 데이터를 실제로 다시 작성할 수는 없습니다. – femtoRgon

0

필드가 올바르게 저장되었다고 가정합니다. 그렇지 않다면, 당신은 운이 없다. 이 저장되어있는 경우

, 당신은 몇 가지 옵션이 있습니다, 나는 가장 쉬운 될 것이라고 생각 : CSV 출력 색인 = true로 (see here)

  • 변화 해당 필드의 스키마를 같은

    1. 덤프 모든 문서를

    2. 후 모두를 (CSV 출력뿐만 아니라 업데이트에 사용될 수있다)

    ,369 색인화
  • 관련 문제