Pārlūkot izejas kodu

修正LuceneIndexer错误释放Directory和Analyzer单例实例的bug

懒得勤快 3 gadi atpakaļ
vecāks
revīzija
54aee6a96f

+ 5 - 5
Masuit.LuceneEFCore.SearchEngine/Extensions/ServiceCollectionExtension.cs

@@ -23,11 +23,11 @@ namespace Masuit.LuceneEFCore.SearchEngine.Extensions
             services.AddMemoryCache();
             services.TryAddSingleton<Directory>(s => FSDirectory.Open(option.Path));
             services.TryAddSingleton<Analyzer>(s => new JieBaAnalyzer(TokenizerMode.Search));
-            services.TryAddTransient<ILuceneIndexer, LuceneIndexer>();
-            services.TryAddTransient<ILuceneIndexSearcher, LuceneIndexSearcher>();
-            services.TryAddTransient(typeof(ISearchEngine<>), typeof(SearchEngine<>));
-            services.TryAddTransient<ISearchEngine<TContext>, SearchEngine<TContext>>();
+            services.TryAddScoped<ILuceneIndexer, LuceneIndexer>();
+            services.TryAddScoped<ILuceneIndexSearcher, LuceneIndexSearcher>();
+            services.TryAddScoped(typeof(ISearchEngine<>), typeof(SearchEngine<>));
+            services.TryAddScoped<ISearchEngine<TContext>, SearchEngine<TContext>>();
             return services;
         }
     }
-}
+}

+ 1 - 1
Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexer.cs

@@ -59,4 +59,4 @@ namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
         /// <returns></returns>
         int Count();
     }
-}
+}

+ 10 - 3
Masuit.LuceneEFCore.SearchEngine/LuceneIndexableBaseEntity.cs

@@ -21,13 +21,14 @@ namespace Masuit.LuceneEFCore.SearchEngine
 #if Int
         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public int Id { get; set; }
+
 #endif
 #if Long
         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
-        public long Id { get; set; } 
+        public long Id { get; set; }
 #endif
 #if String
-        public string Id { get; set; } 
+        public string Id { get; set; }
 #endif
 #if Guid
         public Guid Id { get; set; }
@@ -41,6 +42,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
         public string IndexId
         {
             get => GetType().Name + ":" + Id;
+
             set
             {
             }
@@ -78,18 +80,23 @@ namespace Masuit.LuceneEFCore.SearchEngine
                         case DateTime time:
                             doc.Add(new StringField(name, time.ToString("yyyy-MM-dd HH:mm:ss"), attr.Store));
                             break;
+
                         case int num:
                             doc.Add(new Int32Field(name, num, attr.Store));
                             break;
+
                         case long num:
                             doc.Add(new Int64Field(name, num, attr.Store));
                             break;
+
                         case float num:
                             doc.Add(new SingleField(name, num, attr.Store));
                             break;
+
                         case double num:
                             doc.Add(new DoubleField(name, num, attr.Store));
                             break;
+
                         default:
                             string value = attr.IsHtml ? propertyValue.ToString().RemoveHtmlTag() : propertyValue.ToString();
                             doc.Add(new TextField(name, value, attr.Store));
@@ -101,4 +108,4 @@ namespace Masuit.LuceneEFCore.SearchEngine
             return doc;
         }
     }
-}
+}

+ 1 - 8
Masuit.LuceneEFCore.SearchEngine/LuceneIndexer.cs

@@ -8,7 +8,7 @@ using System.Linq;
 
 namespace Masuit.LuceneEFCore.SearchEngine
 {
-    public class LuceneIndexer : IDisposable, ILuceneIndexer
+    public class LuceneIndexer : ILuceneIndexer
     {
         /// <summary>
         /// 索引目录
@@ -179,12 +179,5 @@ namespace Masuit.LuceneEFCore.SearchEngine
                 return 0;
             }
         }
-
-        /// <summary>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</summary>
-        public void Dispose()
-        {
-            _directory?.Dispose();
-            _analyzer?.Dispose();
-        }
     }
 }

+ 2 - 2
Masuit.LuceneEFCore.SearchEngine/Masuit.LuceneEFCore.SearchEngine.csproj

@@ -9,7 +9,7 @@
         <Copyright>懒得勤快</Copyright>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.LuceneEFCore.SearchEngine</PackageProjectUrl>
         <PackageId>Masuit.LuceneEFCore.SearchEngine_guid</PackageId>
-        <Version>1.1.7</Version>
+        <Version>1.1.8</Version>
         <Configurations>Debug;Release;String版本;Guid版本;Long版本</Configurations>
         <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
         <RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
@@ -41,7 +41,7 @@
         <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.11" />
     </ItemGroup>
     <ItemGroup Condition=" '$(TargetFramework)' == 'net6'">
-        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.2" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.3" />
     </ItemGroup>
 
     <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

+ 3 - 1
WebSearchDemo/Controllers/HomeController.cs

@@ -15,6 +15,7 @@ namespace WebSearchDemo.Controllers
         {
             _searchEngine = searchEngine;
         }
+
         /// <summary>
         /// 搜索
         /// </summary>
@@ -75,6 +76,7 @@ namespace WebSearchDemo.Controllers
         {
             //从数据库更新并同步索引库
             Post p = _searchEngine.Context.Post.Find(post.Id);
+
             // update...
             _searchEngine.Context.Post.Update(p);
             _searchEngine.SaveChanges();
@@ -82,4 +84,4 @@ namespace WebSearchDemo.Controllers
             //_luceneIndexer.Update(p);// 单纯的更新索引库
         }
     }
-}
+}

+ 4 - 1
WebSearchDemo/Startup.cs

@@ -32,6 +32,7 @@ namespace WebSearchDemo
             services.AddDbContext<DataContext>(db =>
             {
                 db.UseInMemoryDatabase("test");
+
                 //db.UseSqlServer("Data Source=.;Initial Catalog=MyBlogs;Integrated Security=True");
             });
             services.AddSearchEngine<DataContext>(new LuceneIndexerOptions()
@@ -65,6 +66,8 @@ namespace WebSearchDemo
             new JiebaSegmenter().AddWord("思杰马克丁"); //添加自定义词库
             new JiebaSegmenter().AddWord("TeamViewer"); //添加自定义词库
             db.Post.AddRange(JsonConvert.DeserializeObject<List<Post>>(File.ReadAllText(AppContext.BaseDirectory + "Posts.json")));
+            db.SaveChanges();
+            searchEngine.DeleteIndex();
             searchEngine.CreateIndex(new List<string>()
             {
                 nameof(Post)
@@ -80,4 +83,4 @@ namespace WebSearchDemo
             });
         }
     }
-}
+}