首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法创建Lucene.Net StandardAnalyzer实例

无法创建Lucene.Net StandardAnalyzer实例
EN

Stack Overflow用户
提问于 2021-01-09 10:13:16
回答 1查看 536关注 0票数 4

我试图使用Lucene.NET,下面是在这个链接https://lucenenet.apache.org/上提供的文档

我正在使用Lucene版本(4.8.0-beta00012)和.NET Core5.0版本。

在创建StandardAnalyzer对象的实例时,我得到了异常。

代码语言:javascript
运行
复制
const LuceneVersion AppLuceneVersion = LuceneVersion.LUCENE_48;
            // Create an analyzer to process the text
            var analyzer = new StandardAnalyzer(AppLuceneVersion);

我得到的例外是

'Lucene.Net.Analysis.Standard.StandardAnalyzer‘的类型初始化程序

引发了一个异常。方法未找到:'System.Collections.Generic.List`1 Lucene.Net.Support.Arrays.AsList(!!0[])。

任何帮助都是感激的,因为我被困在这,我无法继续我的POC。

EN

Stack Overflow用户

回答已采纳

发布于 2021-01-11 16:11:40

这是一条非常奇怪的错误信息。这似乎是说,系统无法定位泛型列表类型。在.Net 5中,这种类型存储在这里:

Files\dotnet\packs\Microsoft.NETCore.App.Ref\5.0.0\ref\net5.0\System.Collections.dll

区域组装System.Collections,Version=5.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a // C:\Program

当您看到错误时,因为StandardAnalyzer使用这种类型,并且系统无法找到它,很可能这个问题与Lucene.Net本身无关。您可以通过尝试执行以下操作来验证该理论:

代码语言:javascript
运行
复制
     List<string> list = new List<string>();
     list.Add("hello world");

有一个很好的改变,代码也会以同样的方式爆炸。如果是这样的话,那么这个问题与Lucene无关。

我可以肯定的是。4.8Beta,功能非常完整,非常稳定,StandardAnalyzer在我使用.Net 5.0的系统上工作得很好。我碰巧使用的是Lucene.Net 4.8.0-beta00013,目前使用的是.Net 5,但从Lucene.Net 4.8.0-beta0006版本开始,我就一直在使用Lucene.Net和其他版本的.Net Core,我的个人经验是,这是一个非常棒的搜索库。

为了在Lucene.Net StandardAnalyzer上为您测试.Net 5.0,我在xUnit中创建了下面的单元测试。单元测试通过并演示了StandardAnalyzer是否正常工作。这段代码可能会稍微简化一些,因为它使用了一种方法,它提供了一个接近实时阅读器的方法,但一旦您解决了系统找不到泛型列表类的原因,它将为您提供一个非常丰富的示例。

代码语言:javascript
运行
复制
[Fact]
        public void TestStandardAnalyzer() {

            Directory indexDir = new RAMDirectory();

            Analyzer standardAnalyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);

            IndexWriterConfig indexConfig = new IndexWriterConfig(LuceneVersion.LUCENE_48, standardAnalyzer);
            indexConfig.UseCompoundFile = true;

            IndexWriter writer = new IndexWriter(indexDir, indexConfig);

            //souce: https://github.com/apache/lucenenet/blob/Lucene.Net_4_8_0_beta00006/src/Lucene.Net/Search/SearcherFactory.cs
            SearcherManager searcherManager = new SearcherManager(writer, applyAllDeletes: true, new SearchWarmer());

            Document doc = new Document();
            doc.Add(new StringField("examplePrimaryKey", "001", Field.Store.YES));
            doc.Add(new TextField("exampleField", "Unique gifts are great gifts.", Field.Store.YES));
            writer.AddDocument(doc);

            doc = new Document();
            doc.Add(new StringField("examplePrimaryKey", "002", Field.Store.YES));
            doc.Add(new TextField("exampleField", "Everyone is gifted.", Field.Store.YES));
            writer.AddDocument(doc);

            doc = new Document();
            doc.Add(new StringField("examplePrimaryKey", "003", Field.Store.YES));
            doc.Add(new TextField("exampleField", "Gifts are meant to be shared.", Field.Store.YES));
            writer.AddDocument(doc);

            writer.Commit();

            searcherManager.MaybeRefreshBlocking();
            IndexSearcher indexSearcher = searcherManager.Acquire();
            try {
                QueryParser parser = new QueryParser(LuceneVersion.LUCENE_48, "exampleField", standardAnalyzer);     
                Query query = parser.Parse("everyone");

                TopDocs topDocs = indexSearcher.Search(query, int.MaxValue);

                int numMatchingDocs = topDocs.ScoreDocs.Length;
                Assert.Equal(1, numMatchingDocs);


                Document docRead = indexSearcher.Doc(topDocs.ScoreDocs[0].Doc);
                string primaryKey = docRead.Get("examplePrimaryKey");
                Assert.Equal("002", primaryKey);

            } finally {
                searcherManager.Release(indexSearcher);
            }
            
        }
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65641448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档