Получение исключения при создании индексатора Lucene с использованием DotNetRDf.Query.FullText

Привет, я пытаюсь использовать DotNetRDf.Query.FullText в .Net core 3.1 для создания индексатора Lucene, но ниже исключения времени выполнения. Не могли бы вы помочь решить эту проблему?

System.TypeLoadException HResult = 0x80131522 Сообщение = Не удалось загрузить тип MaxFieldLength из сборки Lucene.Net, Версия = 4.0.0.0, Культура = нейтральный, PublicKeyToken = 85089178b9ac3181.

Образец кода:

var indexer = new LuceneObjectsIndexer(new RAMDirectory(), new StandardAnalyzer(LuceneVersion), new DefaultIndexSchema());

Используемая версия пакета: DotNetRDF - 2.1.6 Lucene - 4.8.0-beta00013


person Deepali    schedule 22.12.2020    source источник
comment
Можете ли вы предоставить полную трассировку стека для этого исключения?   -  person RonC    schedule 22.12.2020


Ответы (1)


Что-то в этом кажется странным. В Lucene.net 3.x был тип MaxFieldLength, который можно было передать в IndexWriter конструкторе, но в Lucene.net 4.X такого типа нет, а IndexWriter класс не имеет конструктора, который принимает такой параметр.

См. Lucene.net 3.03 ImageWriter class и сравните его с Lucene.net 4.8 класс ImageWriter

Таким образом, кажется, что библиотека DotNetRdf могла быть написана так, чтобы зависеть от конструктора ImageWriter, который доступен только в версии 3.X Lucene. Если вы покажете полную трассировку стека, это может помочь пролить больше света на ситуацию.

Посмотрев на сайт dotnetrdf.org, я не увидел, где они документируют, какую версию Lucene они используют, но из этой ошибки становится ясно, что библиотека предназначена для Lucene.Net 3.x. Я бы рекомендовал попробовать использовать Lucene.Net 3.03 пакеты Nuget, а не пакеты бета версии 4.8. и посмотрите, решит ли это ваши проблемы.

person RonC    schedule 22.12.2020
comment
Я один из сопровождающих dotNetRDF и могу подтвердить, что Рон прав, текущая версия dotNetRDF использует Lucene.net 3.0.3. Я создал этот билет, чтобы отслеживать необходимую работу. Любая поддержка / PR приветствуются! - person Kal; 22.12.2020
comment
Пробовал использовать версию пакета: DotNetRDF - 2.1.6 Lucene - 3.0.3, но получаю ту же ошибку. Трассировка стека - в VDS.RDF.Query.FullText.Indexing.Lucene.BaseSimpleLuceneIndexer..ctor (каталог indexDir, анализатор анализатора, схема IFullTextIndexSchema, режим IndexingMode) в VDS.RDF.QueryInce.FullnexText.Lucene. (Каталог indexDir, анализатор Analyzer, схема IFullTextIndexSchema) - person Deepali; 24.12.2020
comment
Трудно поверить, что вы получите такое же исключение, используя Lucene 3.0.3, поскольку он определенно объявляет тип MaxFieldLength. Чтобы убедиться, что это работает, я использовал Visual Studio 16.8.3 для создания веб-приложения, полную структуру 4.61, mvc и установил dotNetRDf 2.6.1 (это последняя версия НЕ 2.1.6) через nuget, и он автоматически установил Lucene 3.0. 3 как зависимость, мне не нужно было делать это отдельно. Затем я выполнил строку кода, указанную в вопросе, с Lucene.Net.Util.Version.LUCENE_30 в качестве LuceneVersion и запустил код. Он работал без проблем. Я могу отправить вам почтовый индекс проекта. - person RonC; 24.12.2020