Нахождение начала и конца матча с Lucene - PullRequest
2 голосов
/ 26 июля 2010

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

Обновление: я нашел этот связанный вопрос: Поиск позиции поисковых хитов из Lucene

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

1 Ответ

5 голосов
/ 26 июля 2010

На вашем месте я бы просто взял код у 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]));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...