Browse Source

更新索引优化

懒得勤快 3 years ago
parent
commit
7f4dd2aaa1

+ 7 - 5
Masuit.LuceneEFCore.SearchEngine/Interfaces/ILuceneIndexable.cs

@@ -1,6 +1,7 @@
 #if Guid
-using System; 
+using System;
 #endif
+
 using Lucene.Net.Documents;
 using Newtonsoft.Json;
 using System.ComponentModel.DataAnnotations;
@@ -19,15 +20,16 @@ namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
         [LuceneIndex(Name = "Id", Store = Field.Store.YES), Key]
 #if Int
         int Id { get; set; }
+
 #endif
 #if Long
-        long Id { get; set; } 
+        long Id { get; set; }
 #endif
 #if String
-        string Id { get; set; } 
+        string Id { get; set; }
 #endif
 #if Guid
-        Guid Id { get; set; } 
+        Guid Id { get; set; }
 #endif
 
         /// <summary>
@@ -43,4 +45,4 @@ namespace Masuit.LuceneEFCore.SearchEngine.Interfaces
         /// <returns></returns>
         Document ToDocument();
     }
-}
+}

+ 2 - 2
Masuit.LuceneEFCore.SearchEngine/KeywordsManager.cs

@@ -1,5 +1,5 @@
-using System.Collections.Generic;
-using JiebaNet.Segmenter;
+using JiebaNet.Segmenter;
+using System.Collections.Generic;
 
 namespace Masuit.LuceneEFCore.SearchEngine
 {

+ 17 - 5
Masuit.LuceneEFCore.SearchEngine/LuceneIndexer.cs

@@ -1,6 +1,5 @@
 using Lucene.Net.Analysis;
 using Lucene.Net.Index;
-using Lucene.Net.Search;
 using Lucene.Net.Store;
 using Masuit.LuceneEFCore.SearchEngine.Interfaces;
 using System;
@@ -9,7 +8,7 @@ using System.Linq;
 
 namespace Masuit.LuceneEFCore.SearchEngine
 {
-    public class LuceneIndexer : ILuceneIndexer
+    public class LuceneIndexer : IDisposable, ILuceneIndexer
     {
         /// <summary>
         /// 索引目录
@@ -51,6 +50,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
             var config = new IndexWriterConfig(Lucene.Net.Util.LuceneVersion.LUCENE_48, _analyzer);
 
             using var writer = new IndexWriter(_directory, config);
+
             // 删除重建
             if (recreate)
             {
@@ -63,6 +63,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
             {
                 writer.AddDocument(entity.ToDocument());
             }
+
             writer.Flush(true, true);
         }
 
@@ -143,17 +144,21 @@ namespace Masuit.LuceneEFCore.SearchEngine
                 switch (change.State)
                 {
                     case LuceneIndexState.Removed:
-                        writer.DeleteDocuments(new TermQuery(new Term("Id", change.Entity.Id.ToString())));
+                        writer.DeleteDocuments(new Term("Id", change.Entity.Id.ToString()));
+                        writer.DeleteDocuments(new Term("IndexId", change.Entity.IndexId));
                         break;
+
                     case LuceneIndexState.Added:
                     case LuceneIndexState.Updated:
-                        writer.DeleteDocuments(new TermQuery(new Term("Id", change.Entity.Id.ToString())));
+                        writer.DeleteDocuments(new Term("Id", change.Entity.Id.ToString()));
+                        writer.DeleteDocuments(new Term("IndexId", change.Entity.IndexId));
                         writer.AddDocument(change.Entity.ToDocument());
                         break;
                 }
             }
 
             writer.Flush(true, changeset.HasDeletes);
+            writer.Commit();
         }
 
         /// <summary>
@@ -174,5 +179,12 @@ 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();
+        }
     }
-}
+}

+ 1 - 9
Masuit.LuceneEFCore.SearchEngine/Masuit.LuceneEFCore.SearchEngine.csproj

@@ -13,12 +13,11 @@
         <Configurations>Debug;Release;String版本;Guid版本;Long版本</Configurations>
         <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
         <RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
-        <PackageReleaseNotes>支持""和-指令</PackageReleaseNotes>
         <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
         <PublishRepositoryUrl>true</PublishRepositoryUrl>
         <IncludeSymbols>true</IncludeSymbols>
         <SymbolPackageFormat>snupkg</SymbolPackageFormat>
-        <LangVersion>9</LangVersion>
+        <LangVersion>latest</LangVersion>
         <FileVersion>1.1.6</FileVersion>
         <AssemblyVersion>1.1.6</AssemblyVersion>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
@@ -26,13 +25,6 @@
         <SymbolPackageFormat>snupkg</SymbolPackageFormat>
         <PackageReadmeFile>README.md</PackageReadmeFile>
     </PropertyGroup>
-    <ItemGroup>
-      <None Include="..\README.md">
-        <Pack>True</Pack>
-        <PackagePath>\</PackagePath>
-      </None>
-    </ItemGroup>
-
     <ItemGroup>
         <PackageReference Include="JieBa.Lucene.Analyzer" Version="1.0.1" />
         <PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00005" />

+ 4 - 4
WebSearchDemo/WebSearchDemo.csproj

@@ -1,7 +1,7 @@
 <Project Sdk="Microsoft.NET.Sdk.Web">
 
   <PropertyGroup>
-    <TargetFramework>net5.0</TargetFramework>
+    <TargetFramework>net6.0</TargetFramework>
     <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
     <Configurations>Debug;Release;String版本;Guid版本;Long版本</Configurations>
     <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
@@ -13,9 +13,9 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.9" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="5.0.9" />
-    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.1" />
+    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.1" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="6.0.1" />
+    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
   </ItemGroup>
 
   <ItemGroup>