我想阅读每一个索引。我想阅读并打印以控制索引中的单个术语。 (我不想用Luke查看内容)。我必须使用课程IndexReader
吗?
有人可以帮助我吗?
我试着这样做:
iReader = IndexReader.open(directory);
int num = iReader.numDocs();
for ( int i = 0; i < num; i++)
{
if ( ! iReader.isDeleted( i))
{
org.apache.lucene.document.Document d = iReader.document(i);
System.out.println( "d=" +d.getField("title").tokenStreamValue());
}
}
org.apache.lucene.document.Document doc = new org.apache.lucene.document.Document();
//aggiungo tutti i documenti
Field title = new Field(
"title",
testDoc.title,
Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
doc.add(title);
Field content = new Field(
"content",
testDoc.content,
Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS);
doc.add(content);
iWriter.addDocument(doc);
但d = null;
我哪里做错了?
我想将该术语检索到我编入索引的字段标题...
非常感谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
要检查索引,请使用IndexReader
。该类有一个方法document(int)
,您可以使用该方法查找索引包含的单个文档。然后,该文档将为您提供为该文档创建的所有字段。
使用该字段,您可以获取它的值或令牌流(即最终在索引中的字符串)。
[编辑]如果删除文档,索引将有漏洞。所以你必须添加一个支票:
org.apache.lucene.document.Document d = iReader.document(i);
if( d == null ) continue; // <<-- You need this check
System.out.println( "d=" +d.getField("title").tokenStreamValue());
答案 2 :(得分:0)
我正在使用Lucene.Net,但我认为逻辑是相同的。
必须设置StringValue(),ReaderValue()和BinaryValue()中的一个。那些未使用的将返回null或抛出异常。在您的情况下,请尝试读取StringValue()。