2016-10-27 2 views
0

Когда я передаю текст через StandardAnalyzer, я могу получить TokenStream и, итерации по нему, получить различные атрибуты токена, такие как OffsetAtribute.Получить атрибуты из условий LuceneEnum

public static void displayTokensWithFullInfo(TokenStream stream) throws IOException { 
     CharTermAttribute charAttribute = stream.addAttribute(CharTermAttribute.class); 
     OffsetAttribute offsetAttribute = stream.addAttribute(OffsetAttribute.class); 

     stream.reset(); 
     while (stream.incrementToken()) { 
      System.out.print(offsetAttribute.startOffset() + "->" + offsetAttribute.endOffset() + " \""); 
      System.out.print(charAttribute.toString());  

     } 

     stream.close(); 
    } 

После сохранения TokenStream, индексировать, я пытаюсь получить OffsetAttribute от TermsEnum, но значения смещения я получаю всегда euqual 0.

IndexReader reader = new IndexSearcher(DirectoryReader.open(directory)).getIndexReader(); 
    Terms terms = MultiFields.getTerms(reader,"field"); 
    TermsEnum termsEnum = terms.iterator(); 
        BytesRef bytesRef = termsEnum.next(); 
        while(bytesRef != null){ 
         AttributeSource attributeSource = termsEnum.attributes(); 
         OffsetAttribute offsetAttribute = attributeSource.addAttribute(OffsetAttribute.class); 

         bytesRef = termsEnum.next(); 
        } 

Что я делаю неправильно? Возможно ли получить этот атрибут из TermVector? Что делать, если я хочу создать свою собственную реализацию Атрибута, делает ли Lucene эту лазейку?

спасибо.

ответ

0

Это TermsEnum выполняет итерации по всем возникающим условиям в вашем корпусе. Это означает, что вы получаете «Дом» один раз, даже если это происходит во многих документах.

Извлечение TermVector/Смещение для этого не имеет смысла, поскольку это работает только в отношении Документа, содержащего этот Термин.

Вы, возможно, хотите получить TermsEnum с TermVectors для одного документа:

TermsEnum tEnum = reader.getTermVector(123, "field").iterator() 

см IndexReader.getTermVector

Смежные вопросы