В настоящее время я пытаюсь получить количество появлений каждого слова в поле описания, используя Lucene.
F.E.
- описание: КОРОБКА ЯБЛОКОВ
- описание: КОРОБКА БАНАНОВ
выход:
- BOX 2
- OF 2
- ЯБЛОКИ 1
- BANANAS 1
Я ищу слово и частоту.
Дело в том, что я хотел бы отфильтровать эти результаты для данного документа, я имею в виду только подсчет слов в поле описания данного документа.
Спасибо за любую помощь.
// в ответ на комментарий:
У меня есть что-то вроде этого:
public ArrayList<ObjectA> GetIndexTerms(String code) {
try {
ArrayList<Object> termlist = new ArrayList<ObjectA>();
indexR = IndexReader.open(path);
TermEnum terms = indexR.terms();
while (terms.next()) {
Term term = terms.term();
String termText = term.text();
int frequency = indexR.docFreq(term);
ObjectA newObj = new ObjectA(termText, frequency);
termlist.add(newObj);
}
}
return termlist;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
Но я не вижу, как отфильтровать его по документу ...
// СЕГОДНЯ!
Используя termfreqvec, я могу заставить его работать, но он требует de doc id, и я не могу использовать его правильно. Поскольку я использовал запрос, значение de "i" начинается с 0, а это не правильный идентификатор документа. Любые идеи, чтобы заставить это работать должным образом?
Спасибо!
TopDocs tp = indexS.search(query, Integer.MAX_VALUE);
for (int i = 0; i < tp.scoreDocs.length; i++){
ScoreDoc sds = tp.scoreDocs[i];
Document doc = indexS.doc(sds.doc);
TermFreqVector tfv = indexR.getTermFreqVector(i,"description");
for (int j = 0; j < tfv.getTerms().length; j++) {
String item = tfv.getTerms()[j];
termlist.add(new TerminoDescripcion(item.toUpperCase(), tfv.getTermFrequencies()[j]));
}
}