Индекс находился за пределами массива при использовании Lucene.NET - PullRequest
0 голосов
/ 28 сентября 2018

Я использую библиотеку 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 ...

...