Я использую библиотеку Lucene.net версии 3 для индексации данных и поиска по ним, но по некоторым причинам иногда она выдает странное сообщение об ошибке внутри, и я даже не могу понять, почему это происходит.Ниже приведен мой код, когда я пытаюсь выполнить поиск по индексу:
using (var analyzer = new StandardAnalyzer(Version.LUCENE_30))
{
using (var reader = IndexReader.Open(directory, true))
{
using (var searcher = new IndexSearcher(reader))
{
term = QueryParser.Escape(term);
var parsedQuery =
new MultiFieldQueryParser(Version.LUCENE_30, includedFields, analyzer)
.Parse(term);
var result = searcher.Search(parsedQuery, reader.MaxDoc); //Here happens the error
totalCount = result.TotalHits;
var matches = result.ScoreDocs.OrderByDescending(x => x.Score).ToPaginated(page, size);
foreach (var match in matches)
{
int docId = match.Doc;
var document = searcher.Doc(docId);
var item = //...
list.Add(item);
}
}
}
}
Это сообщение об ошибке не всегда происходит, оно происходит только тогда, когда в качестве поискового термина задается какая-то произвольная текстовая строка, поэтому иногда это работаетну и иногда вылетает.
Я пытаюсь вырваться из термина, но все же безуспешноКто-нибудь знает, что я могу сделать здесь не так?
Вот сообщение об ошибке:
на Lucene.Net.Search.TermScorer.Score () в d:\ Lucene.Net \ FullRepo \ trunk \ src \ core \ Search \ TermScorer.cs: строка 136 в Lucene.Net.Search.DisjunctionSumScorer.AdvanceAfterCurrent () в d: \ Lucene.Net \ FullRepo \ trunk \ src \ core \ Search\ DisjunctionSumScorer.cs: строка 187 в Lucene.Net.Search.DisjunctionSumScorer.NextDoc () в d: \ Lucene.Net \ FullRepo \ trunk \ src \ core \ Search \ DisjunctionSumScorer.cs: строка 155 в Lucene.Net.Search.BooleanScorer2.NextDoc () в d: \ Lucene.Net \ FullRepo \ trunk \ src \ core \ Search \ BooleanScorer2.cs: строка 397 в Lucene.Net.Search.BooleanScorer.NextDoc () в d: \ Lucene.Net \ FullRepo\ trunk \ src \ core \ Search \ BooleanScorer.cs: строка 369 на Lucene.Net.Search.BooleanScorer.Score (сборщик коллекторов) в d: \ Lucene.Net \ FullRepo \ trunk \ src \ core \ Search \ BooleanScorer.cs: строка 389 в Lucene.Net.Search.IndexSearcher.Search (Весовой вес, Фильтр фильтра, Коллекторный коллектор) в d: \ Lucene.Net \ FullRepo \ trunk \ src \ core \ Search \ IndexSearcher.cs: строка 221 в Lucene.Net.Search.IndexSearcher.Search (весовой коэффициент, фильтр-фильтр, Int32 nDocs) в d: \ Lucene.Net \ FullRepo \ trunk \ src \core \ Search \ IndexSearcher.cs: строка 188 в Blog.Services.SearchService. <> c__DisplayClass3_0.b__0 () в E: \ Blog \ Blog \ Blog.Services \ SearchService.cs: строка 98 в
Вот случайная строка, которая приводит к сбою: 212 Я думаю, что сначала веб-приложение использует ef db. Я пытаюсь использовать ленивый .Строка не имеет никакого значения, но все же странно для меня, почему она должна вызывать крах lucene ...