Browse Source

搜索排序优化

懒得勤快 4 years ago
parent
commit
3aad7bc508

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

@@ -140,21 +140,16 @@ namespace Masuit.LuceneEFCore.SearchEngine
                 query = GetFuzzyquery(queryParser, options.Keywords);
             }
 
-            var sortFields = new List<SortField>
-            {
-                SortField.FIELD_SCORE
-            };
-            sortFields.AddRange(options.OrderBy.Select(sortField => new SortField(sortField, SortFieldType.STRING)));
-
             // 排序规则处理
-            var sort = new Sort(sortFields.ToArray());
+            var sort = new Sort(options.OrderBy.ToArray());
             Expression<Func<ScoreDoc, bool>> where = m => m.Score >= options.Score;
             if (options.Type != null)
             {
                 // 过滤掉已经设置了类型的对象
                 where = where.And(m => options.Type.AssemblyQualifiedName == searcher.Doc(m.Doc).Get("Type"));
             }
-            var matches = searcher.Search(query, null, options.MaximumNumberOfHits, sort, true, true).ScoreDocs.Where(@where.Compile());
+
+            var matches = searcher.Search(query, null, options.MaximumNumberOfHits, sort, true, true).ScoreDocs.Where(where.Compile());
             results.TotalHits = matches.Count();
 
             // 分页处理

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

@@ -4,12 +4,12 @@
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <Authors>懒得勤快</Authors>
         <Company>懒得勤快</Company>
-        <Product>基于EntityFrameworkCore和Lucene.NET实现的全文检索搜索引擎,主键long版本</Product>
+        <Product>基于EntityFrameworkCore和Lucene.NET实现的全文检索搜索引擎,主键int版本</Product>
         <Description>基于EntityFrameworkCore和Lucene.NET实现的全文检索搜索引擎</Description>
         <Copyright>懒得勤快</Copyright>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.LuceneEFCore.SearchEngine</PackageProjectUrl>
-        <PackageId>Masuit.LuceneEFCore.SearchEngine_long</PackageId>
-        <Version>1.1.1</Version>
+        <PackageId>Masuit.LuceneEFCore.SearchEngine_int</PackageId>
+        <Version>1.1.2</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.1</FileVersion>
-        <AssemblyVersion>1.1.1</AssemblyVersion>
+        <FileVersion>1.1.2</FileVersion>
+        <AssemblyVersion>1.1.2</AssemblyVersion>
         <EmbedUntrackedSources>true</EmbedUntrackedSources>
         <IncludeSymbols>true</IncludeSymbols>
         <SymbolPackageFormat>snupkg</SymbolPackageFormat>

+ 15 - 6
Masuit.LuceneEFCore.SearchEngine/SearchOptions.cs

@@ -1,4 +1,5 @@
-using Masuit.LuceneEFCore.SearchEngine.Extensions;
+using Lucene.Net.Search;
+using Masuit.LuceneEFCore.SearchEngine.Extensions;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -29,7 +30,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
         /// <summary>
         /// 多字段搜索时,给字段设定搜索权重
         /// </summary>
-        private Dictionary<string, float> _boosts;
+        private readonly Dictionary<string, float> _boosts;
 
         /// <summary>
         /// 多字段搜索时,给字段设定搜索权重
@@ -50,7 +51,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
         /// <summary>
         /// 排序字段
         /// </summary>
-        public List<string> OrderBy { get; set; }
+        public List<SortField> OrderBy { get; set; }
 
         /// <summary>
         /// 跳过多少条
@@ -94,10 +95,13 @@ namespace Masuit.LuceneEFCore.SearchEngine
             MaximumNumberOfHits = maximumNumberOfHits;
             Skip = skip;
             Take = take;
-            this._boosts = boosts ?? new Dictionary<string, float>();
+            _boosts = boosts ?? new Dictionary<string, float>();
             Type = type;
             Fields = new List<string>();
-            OrderBy = new List<string>();
+            OrderBy = new List<SortField>()
+            {
+                SortField.FIELD_SCORE
+            };
 
             // 添加被检索字段
             if (!string.IsNullOrEmpty(fields))
@@ -110,7 +114,7 @@ namespace Masuit.LuceneEFCore.SearchEngine
             if (!string.IsNullOrEmpty(orderBy))
             {
                 orderBy = orderBy.RemoveCharacters(" ");
-                OrderBy.AddRange(orderBy.Split(',').ToList());
+                OrderBy.AddRange(orderBy.Split(',').Select(sortField => new SortField(sortField, SortFieldType.STRING)));
             }
         }
 
@@ -155,5 +159,10 @@ namespace Masuit.LuceneEFCore.SearchEngine
             Skip = (page - 1) * size;
             Take = size;
         }
+
+        public void SetBoosts(string field, float boost)
+        {
+            _boosts[field] = boost;
+        }
     }
 }