Browse Source

支持近义词

懒得勤快 4 years ago
parent
commit
8d17581b41

+ 77 - 0
Masuit.LuceneEFCore.SearchEngine/KeywordsManager.cs

@@ -0,0 +1,77 @@
+using System.Collections.Generic;
+using JiebaNet.Segmenter;
+
+namespace Masuit.LuceneEFCore.SearchEngine
+{
+    public static class KeywordsManager
+    {
+        /// <summary>
+        /// 近义词组
+        /// </summary>
+        internal static HashSet<(string key, string value)> SynonymWords { get; set; } = new();
+
+        /// <summary>
+        /// 添加近义词
+        /// </summary>
+        /// <param name="pair"></param>
+        public static void AddSynonyms(KeyValuePair<string, string> pair)
+        {
+            SynonymWords.Add((pair.Key, pair.Value));
+        }
+
+        /// <summary>
+        /// 添加近义词
+        /// </summary>
+        /// <param name="pair"></param>
+        public static void AddSynonyms((string, string) pair)
+        {
+            SynonymWords.Add((pair.Item1, pair.Item2));
+        }
+
+        /// <summary>
+        /// 添加近义词
+        /// </summary>
+        /// <param name="pair"></param>
+        public static void AddSynonyms(IEnumerable<(string key, string value)> pairs)
+        {
+            foreach (var t in pairs)
+            {
+                SynonymWords.Add(t);
+            }
+        }
+
+        /// <summary>
+        /// 添加近义词
+        /// </summary>
+        /// <param name="pairs"></param>
+        public static void AddSynonyms(IEnumerable<KeyValuePair<string, string>> pairs)
+        {
+            foreach (var pair in pairs)
+            {
+                SynonymWords.Add((pair.Key, pair.Value));
+            }
+        }
+
+        /// <summary>
+        /// 添加关键词
+        /// </summary>
+        /// <param name="word"></param>
+        public static void AddWords(string word)
+        {
+            new JiebaSegmenter().AddWord(word);
+        }
+
+        /// <summary>
+        /// 添加关键词
+        /// </summary>
+        /// <param name="word"></param>
+        public static void AddWords(IEnumerable<string> word)
+        {
+            var js = new JiebaSegmenter();
+            foreach (var s in word)
+            {
+                js.AddWord(s);
+            }
+        }
+    }
+}

+ 3 - 1
Masuit.LuceneEFCore.SearchEngine/LuceneIndexSearcher.cs

@@ -73,6 +73,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
             list.AddRange(Regex.Matches(keyword, "([A-z]+)([0-9.]+)").Cast<Match>().SelectMany(m => m.Groups.Cast<Group>().Select(g => g.Value)));//英文+数字
             list.AddRange(new JiebaSegmenter().Cut(keyword, true));//结巴分词
             list.RemoveAll(s => s.Length < 2);
+            list.AddRange(KeywordsManager.SynonymWords.Where(t => list.Contains(t.key) || list.Contains(t.value)).SelectMany(t => new[] { t.key, t.value }));
             list = list.Distinct().OrderByDescending(s => s.Length).Take(10).ToList();
             _memoryCache.Set(keyword, list, TimeSpan.FromHours(1));
             return list;
@@ -162,6 +163,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
             }
 
             var docs = matches.ToList();
+
             // 创建结果集
             foreach (var match in docs)
             {
@@ -229,4 +231,4 @@ namespace Masuit.LuceneEFCore.SearchEngine
             return ScoredSearch(options);
         }
     }
-}
+}

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

@@ -8,8 +8,8 @@
         <Description>基于EntityFrameworkCore和Lucene.NET实现的全文检索搜索引擎</Description>
         <Copyright>懒得勤快</Copyright>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.LuceneEFCore.SearchEngine</PackageProjectUrl>
-        <PackageId>Masuit.LuceneEFCore.SearchEngine_int</PackageId>
-        <Version>1.1.5</Version>
+        <PackageId>Masuit.LuceneEFCore.SearchEngine_string</PackageId>
+        <Version>1.1.6</Version>
         <Configurations>Debug;Release;String版本;Guid版本;Long版本</Configurations>
         <RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
         <RunAnalyzersDuringLiveAnalysis>false</RunAnalyzersDuringLiveAnalysis>
@@ -19,8 +19,8 @@
         <IncludeSymbols>true</IncludeSymbols>
         <SymbolPackageFormat>snupkg</SymbolPackageFormat>
         <LangVersion>9</LangVersion>
-        <FileVersion>1.1.5</FileVersion>
-        <AssemblyVersion>1.1.5</AssemblyVersion>
+        <FileVersion>1.1.6</FileVersion>
+        <AssemblyVersion>1.1.6</AssemblyVersion>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
         <IncludeSymbols>true</IncludeSymbols>
         <SymbolPackageFormat>snupkg</SymbolPackageFormat>
@@ -49,7 +49,7 @@
         <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.11" />
     </ItemGroup>
     <ItemGroup Condition=" '$(TargetFramework)' == 'net6'">
-        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
+        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
     </ItemGroup>
 
     <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">