我目前正在尝试使用Lucene获取描述字段中每个单词的出现量。 F.E.
输出:
我希望得到这个词和频率。
问题是我想将这些结果过滤到给定的文档,我的意思是只计算给定文档的描述字段中的单词。
感谢您给予的任何帮助。
//回答评论: 我有这样的事情:
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;
}
}
但我不知道如何通过文件来过滤它......
// TODAY!
使用termfreqvec我可以让它工作,但需要de doc id,我无法正确使用它。由于我使用了查询de“i”值从0开始,这不是正确的文档ID。有什么想法让这个工作正常吗? 谢谢!
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]));
}
}
答案 0 :(得分:2)
问题在于Lucene是一个倒置索引,这意味着它可以很容易地根据术语检索文档,而您正在寻找相反的方法,即根据文档检索术语。
希望这是一个经常出现的问题,Lucene让您能够检索文档的术语(术语向量),前提是您在索引时启用了此功能。
请参阅TermVector.YES和Field constructor了解如何在索引编制时启用它们,IndexReader了解如何在搜索时检索术语向量。
或者,您可以动态地重新分析存储的字段,但这可能会更慢,尤其是在大字段上。