Lucene 索引字段使用:新文本字段(字符串字段名、读卡器)

Lucene 索引字段使用:新文本字段(字符串字段名、读卡器),lucene,Lucene,我一直在尝试使用Lucene在字段中提供的readerValue()为字段编制索引。问题是这些术语没有被编入索引。这是代码中有趣的部分: IndexWriterConfig config=newindexwriterconfig(newsimpleanalyzer()); IndexWriter IndexWriter=新的IndexWriter(目录,配置); index writer.deleteAll(); String str=“要索引的一些随机文本”; 读卡器=新的StringRead

我一直在尝试使用Lucene在字段中提供的readerValue()为字段编制索引。问题是这些术语没有被编入索引。这是代码中有趣的部分:

IndexWriterConfig config=newindexwriterconfig(newsimpleanalyzer());
IndexWriter IndexWriter=新的IndexWriter(目录,配置);
index writer.deleteAll();
String str=“要索引的一些随机文本”;
读卡器=新的StringReader(str);
单据单据=新单据();
添加文档(新文本字段(“内容”,读卡器));
indexWriter.addDocument(文档);
现在,如果我使用另一个TextField构造函数将该文本作为字符串索引,它可以正常工作,但像这样,它不会对术语进行索引,而是在搜索后尝试获取字段值时返回null:

QueryParser QueryParser=newqueryparser(“内容”,new SimpleAnalyzer());
Query=queryParser.parse(文本);
TopDocs TopDocs=indexSearcher.search(查询,10);
for(ScoreDoc ScoreDoc:topDocs.scoreDocs){
Document Document=indexSearcher.doc(scoreDoc.doc);
Reader r=document.getField(“内容”).readerValue();

我真的看不出这个问题,可能是我遗漏了一些愚蠢的东西,或者可能是我用错了?提前感谢您的帮助。

默认情况下,
TextField
是未存储的。您看到的行为应该是未存储的字段。您应该能够搜索它,但不能从索引中检索它。构造函数hat接受字段内容的字符串参数,允许您设置是否存储字段,从而实现不同的行为

存储选项在该构造函数上不可用的原因是,Lucene明确禁止使用
读取器
令牌流
值设置存储字段。如果要存储字段,只需从
读取器
自己获取字符串值即可