2009-12-14 109 views
1

我创建了一个网站,但我有一个问题。 我想建立一旦索引和使用它。Lucene.net:单独的建筑索引搜索索引

目前我有两个功能,“创建一个文档的储存入目录”和“搜索”

当用户提交:

sub submit() 
    create_doc() 
    search(text) 
end sub 

这个工作,但是当我尝试这:

create_doc() 
sub submit() 
    search(text) 
end sub 

这就像目录已被删除。

global: 
Dim analyzer As StandardAnalyzer = New StandardAnalyzer()Dim directory As Directory = FSDirectory.GetDirectory("C:\[...]luceneindex", True) 
Dim indexwriter As IndexWriter = New IndexWriter(directory, analyzer, True) 

Sub create_doc() 
    Dim meindoc As New Document() 
    im feldbodytext As Field = New Field("bodytext", textstring[...] 
    meindoc.Add(feldbodytext) 
    indexwriter.AddDocument(meindoc) 
    indexwriter.Close() 
end sub 

Sub lucene_search(ByVal strSuchbegriff As String) 
    Dim parser As QueryParser = New QueryParser("bodytext", analyzer) 
    Dim query As Query = parser.Parse(strSuchbegriff) 
    Dim hits As Hits = searcher.Search(query) 
    [...] 
end sub 

是否有可能永久存储索引? 可能会有init问题。指数作家gloabel,但关闭它当地?

回答

4

我觉得你的问题是,每次你宣布你IndexWriter,正在重新创建索引和删除索引的内容 - 这是因为第三个参数传递到构造函数(True)的:

Dim indexwriter As IndexWriter = New IndexWriter(directory, analyzer, True) 

您应该改用False,以表明该指数的现有内容应保持不变:

Dim indexwriter As IndexWriter = New IndexWriter(directory, analyzer, False) 
+0

您好,非常感谢您的回答侑, 利用昏暗的IndexWriter作为的IndexWriter =新的IndexWriter(目录,分析仪,FALSE) 我遇到一个错误“源无法找到” ,它甚至当我第一次编入索引时没有找到任何东西, 当我把两个函数放在另一个函数中时,他找到了一个索引。 它可能是目录? : Dim directory As Directory = FSDirectory.GetDirectory(“C:\ Dok [...] \ luceneindex”,True) – Tyzak 2009-12-15 08:00:30

0

啊,我想我已经得到了它;-)

我第一次创建一个索引我必须使用

Dim directory As Directory = FSDirectory.GetDirectory("C:\[...]\luceneindex", True) 
Dim indexwriter As IndexWriter = New IndexWriter("C:\[...]luceneindex", analyzer, True) 

和索引后,我不得不都与“假”使用。

真的每次都创建一个索引? 感谢=)

+0

是的 - 您需要在第一次创建索引时使用该目录,然后从该点使用假表示您正在添加到现有的索引。 – Justin 2009-12-15 09:21:07