Ahm*_*ani 15 java lucene netbeans
我是Java和Lucene的新手.我的代码从文件中获取一行并将其存储在Lucene Index中.但是当我创建一个IndexReader搜索索引并从索引读取时,它会抛出一个异常.
我的java代码如下.在创建IndexReader它时抛出一个IndexNotFoundException
static String itemsfreq[];
static StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
static IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_35, analyzer);
public static void index_data(Directory indexed_document,int doc_num,IndexWriter w) throws IOException
{
for(int i = 0;i < itemsfreq.length;i++)
{
Document doc = new Document();
doc.add(new Field(Integer.toString(doc_num)+","+itemsfreq[i],itemsfreq[i++], Field.Store.YES, Field.Index.ANALYZED));
w.addDocument(doc);
}
}
//Gets string from a file and insert it in INDEX named indexed_document
public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new FileReader("fullText100.txt"));
String line;
int i = 0;
Directory indexed_document = new RAMDirectory();
IndexWriter writer = new IndexWriter(indexed_document, config);
while((line=reader.readLine()) != null)
{
if(i == 1)
{
break;
}
itemsfreq = line.split(" ");
index_data(indexed_document,i,writer);
i++;
}
IndexReader r = IndexReader.open(indexed_document);
}
Run Code Online (Sandbox Code Playgroud)
小智 24
在使用阅读器打开索引之前,请调用一次 writer.commit()
csu*_*nig 17
要将更改写入索引,您必须关闭索引编写器,然后打开IndexReader.
writer.close();
Run Code Online (Sandbox Code Playgroud)
如果必须在写入完成之前打开IndexReader,则必须告诉IndexReader重新打开索引以查看更改.
您需要做的是在打开IndexSearcher之前显式调用commit.
directory = new RAMDirectory();
iwriter = new IndexWriter(directory, config);
iwriter.commit();
Run Code Online (Sandbox Code Playgroud)
现在打开搜索者
ireader = DirectoryReader.open(directory);
isearcher = new IndexSearcher(ireader);
Run Code Online (Sandbox Code Playgroud)
还记得你需要在添加文档后调用commit,否则搜索可能找不到它.提交者需要在提交后重新开放(当然是关闭老搜索者).
iwriter.commit();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17738 次 |
| 最近记录: |