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

Есть ли возможность хранить индекс постоянно? может ли быть проблема в нем. индексный писатель gloabel, но закрыть его локально?


person Tyzak    schedule 14.12.2009    source источник


Ответы (2)


Я думаю, ваша проблема в том, что каждый раз, когда вы объявляете свой IndexWriter, индекс создается заново, а содержимое индекса стирается - это из-за того, что 3-й параметр передается в конструктор (True):

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

Вместо этого вы должны использовать False, чтобы указать, что существующее содержимое индекса должно оставаться неизменным:

Dim indexwriter As IndexWriter = New IndexWriter(directory, analyzer, False)
person Justin    schedule 14.12.2009
comment
привет, спасибо за ваш ответ, используя индексатор Dim As IndexWriter = New IndexWriter (каталог, анализатор, False), я сталкиваюсь с ошибкой, источник не может быть найден, и он даже ничего не находит, когда я индексирую в первый раз , когда я помещаю обе функции в одну другую функцию, он находит индекс. может это каталог? : Dim directory As Directory = FSDirectory.GetDirectory(C:\Dok[...]\luceneindex, True) - person Tyzak; 15.12.2009

ааа, кажется я понял ;-)

в первый раз, когда я создаю индекс, я должен использовать

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

и после индексации я должен использовать оба с «False».

True каждый раз создает индекс? спасибо =)

person Tyzak    schedule 15.12.2009
comment
Да - вам нужно использовать это при первом создании индекса, а затем с этого момента вы используете False, чтобы указать, что вы добавляете к существующему индексу. - person Justin; 15.12.2009