Lucene: повторить все записи - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть индекс Lucene, который я хотел бы повторить (для однократной оценки на текущем этапе разработки) У меня есть 4 документа с каждым от нескольких сотен тысяч до миллионов записей, которые я хочу повторить, чтобы подсчитать количество слов для каждой записи (~ 2-10) и вычислить распределение частоты.

Что я сейчас делаю, так это:

   for (int i = 0; i < reader.maxDoc(); i++) {
                    if (reader.isDeleted(i))
                        continue;

                    Document doc = reader.document(i);
                Field text = doc.getField("myDocName#1");

                String content = text.stringValue();


                int wordLen = countNumberOfWords(content);
//store
}

Пока что что-то повторяется. Отладка подтверждает, что она, по крайней мере, работает на условиях, хранящихся в документе, но по какой-то причине обрабатывает только небольшую часть хранимых условий. Интересно, что я делаю не так? Я просто хочу перебрать все документы и все, что в них хранится?

1 Ответ

1 голос
/ 26 сентября 2011

Во-первых, вам нужно убедиться, что вы включили индексирование с включенными TermVectors

doc.add(new Field(TITLE, page.getTitle(), Field.Store.YES, Field.Index.ANALYZED, TermVector.WITH_POSITIONS_OFFSETS));

Тогда вы можете использовать IndexReader.getTermFreqVector для подсчета терминов

TopDocs res = indexSearcher.search(YOUR_QUERY, null, 1000);

// iterate over documents in res, ommited for brevity

reader.getTermFreqVector(res.scoreDocs[i].doc, YOUR_FIELD, new TermVectorMapper() {
            public void map(String termval, int freq, TermVectorOffsetInfo[] offsets, int[] positions) {
                // increment frequency count of termval by freq
                freqs.increment(termval, freq);
            }

            public void setExpectations(String arg0, int arg1,boolean arg2, boolean arg3) {}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...