2012-03-19 2 views
1

lucene 색인에서 Document 안에 Field에 사용 된 토큰 (토큰 목록, TokenStream 또는 다른 것이 든)을 어떻게 얻을 수 있습니까? 즉, 인덱스에서 tokens (예제)에 사용 된 토큰을 가져올 수 있습니까? 문서에서lucene 색인에서 필드 토큰 가져 오기

doc.add(new Field("title", tokens)) 

을 (내가 TokenStream에서 토큰을 얻는 방법을 궁금해하고 있지 않다)이 Field.tokenStreamValue()있어하지만 난 doc.getFieldable(field_name)을 수행 할 때 단순히 null을 반환합니다.

가 나는 또한 ( lucene - Fieldable.tokenStreamValue()에서 세 번째 코멘트에서) 시도했다 :

TokenSources.getTokenStream(reader, doc_id, field_name) 

하지만

java.lang.IllegalArgumentException: title in doC#630does not have any term position data stored 
    at org.apache.lucene.search.highlight.TokenSources.getTokenStream(TokenSources.java:256) 

답변

2

을 얻는 TokenSources 클래스에 대한 문서의 토큰을 검색하는 헬퍼 클래스입니다 목적 강조. 주어진 문서의 용어를 검색하는 방법에는 두 가지가 있습니다

  • 다시 분석하는 저장 필드, 문서의 용어 벡터를 읽고
  • 합니다.

tries to read the document's terms vector을 사용하려는 방법이지만 인덱싱 할 때 용어 벡터를 활성화하지 않았기 때문에 실패합니다.

인덱싱 할 때 용어 벡터를 사용하고이 방법 (계속 Field constructorField.TermVector의 설명서 참조)을 사용하거나 저장된 필드의 콘텐츠를 다시 분석 할 수 있습니다. 첫 번째 방법은 특히 큰 필드의 경우 더 나은 성능을 제공 할 수 있지만 두 번째 방법은 공간을 절약합니다 (필드가 이미 저장되어있는 경우 저장할 추가 정보가 없음).