2010-07-26 4 views
2

Я хотел бы найти начальную и конечную позиции матча из запроса lucene (Version 3.0.2 для Java). Похоже, что я должен получить эту информацию от Highlighter или FastVectorHighligher, но эти классы, похоже, возвращают фрагмент текста с выделенным выделенным текстом. Есть ли способ получить эту информацию с помощью Highlighter или самого ScoreDoc?Поиск начала и конца матча с Lucene

Обновление: Я нашел этот родственный вопрос: Finding the position of search hits from Lucene

Но я думаю, что ответ на Allasso не будет работать для меня, потому что мои запросы фразы, а не отдельные термины.

ответ

5

Если бы я был вами, я бы просто взял код от FastVectorHighlighter. Соответствующий код находится в FieldTermStack:

 List<string> termSet = fieldQuery.getTermSet(fieldName); 
     VectorHighlightMapper tfv = new VectorHighlightMapper(termSet);  
     reader.GetTermFreqVector(docId, fieldName, tfv); // <-- look at this line 

     string[] terms = tfv.GetTerms(); 
     foreach (String term in terms) 
     { 
      if (!termSet.Contains(term)) continue; 
      int index = tfv.IndexOf(term); 
      TermVectorOffsetInfo[] tvois = tfv.GetOffsets(index); 
      if (tvois == null) return; // just return to make null snippets 
      int[] poss = tfv.GetTermPositions(index); 
      if (poss == null) return; // just return to make null snippets 
      for (int i = 0; i < tvois.Length; i++) 
       termList.AddLast(new TermInfo(term, tvois[i].GetStartOffset(), tvois[i].GetEndOffset(), poss[i])); 

Главное, есть reader.GetTermFreqVector(). Как я уже сказал, FastVectorHighlighter уже выполняет некоторые работы, которые я просто копировал, но если вы хотите, вызов GetTermPositions должен делать все, что вам нужно.

+0

Я должен был указать, что использую Lucene Java 3.0.2. Тем не менее, я посмотрю на код для FastVectorHighlighter, посмотрим, смогу ли я получить то, что мне нужно оттуда. –

+0

@Mike: Извините, я понял, что синтаксис C# был достаточно близок к java. В любом случае, TermPositionsVector должен делать то, что вы хотите. Поскольку вы хотите выделить фразы, это будет немного сложнее (вам нужно будет найти те, которые находятся рядом друг с другом), но это не должно быть слишком плохо. – Xodarap

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