上次給大家推薦過一個基于Lucene全文搜尋庫:《一個基于EntityFrameworkCore+Lucene實作的全文搜尋引擎庫》,今天再給大家推薦一個更輕量的全文搜尋,它肯定沒有基于Lucene全文搜尋性能高,但可以用在一些簡單的業務場景中。
項目簡介
這是一個IQueryable與IEnumerable擴充方法庫,該項目已經上傳至nuget,可以直接通過指令安裝使用。
主要特色功能有:
1、支援Linq寫法;
2、支援模糊搜尋、等于搜尋、開頭比對、結尾比對、比對數量排序等功能。
技術架構
1、平台:Net4.5、netstandard1.0。
2、開發工具:Visual Studio 2018
項目結構
功能
一、IQueryable擴充提供方法清單:
- Containing: 模糊比對搜尋
- IsEqual :是否等于比對搜尋
- StartsWith:開頭比對搜尋
1、Containing使用方法
//單個屬性比對單個詞
var result = queryableData.Search(x => x.Property1)
.Containing("searchTerm");
//多個個屬性比對單個詞
var result = queryableData
.Search(x => x.Property1, x => x.Property2, x => x.Property3)
.Containing("searchTerm");
//在單個屬性中搜尋多個搜尋詞
var result = queryableData
.Search(x => x.Property1)
.Containing("search", "term");
//在多個屬性中搜尋多個搜尋詞
var result = queryableData
.Search(x => x.Property1, x => x.Property2, x => x.Property3)
.Containing("searchTerm1", "searchTerm2", "searchTerm3");
2、Containing與Search組合使用
var result = queryableData.Search(x => x.Property1)
.Containing("searchTerm1")
.Search(x => x.Property1)
.Containing("searchTerm2");
3、IsEqual使用方法
var result = queryableData
.Search(x => x.Property1, x => x.Property2, x => x.Property3)
.IsEqual("searchTerm1", "searchTerm2", "searchTerm3");
4、StartsWith使用方法
var result = queryableData
.Search(x => x.Property1, x => x.Property2, x => x.Property3)
.StartsWith("searchTerm1", "searchTerm2", "searchTerm3");
二、IEnumerable擴充提供方法清單:
- SetCulture:指定比對模式
- Containing :模糊比對搜尋
- IsEqual :等于比對搜尋
- StartsWith :開頭比對搜尋
- EndsWith :結尾比對搜尋
使用方法:
var result = enumerableData.Search(x => x.Property1)
.SetCulture(StringComparison.OrdinalIgnoreCase)
.StartsWith("abc")
// Uses OrdinalIgnoreCase
.SetCulture(StringComparison.Ordinal)
.EndsWith("xyz")
// Uses Ordinal
.SetCulture(StringComparison.CurrentCulture)
.Containing("mno");
//Uses CurrentCulture
三、比對數量排序搜尋
IQueryable和IEnumerable擴充都支援:排序搜尋。根據比對數量排序傳回搜尋結果,使用方法如下:
定義實體
public interface IRanked<out T>
{
int Hits { get; }
T Item { get; }
}
排序搜尋,在單個屬性中搜尋單個搜尋詞:
var result = queryableData.Search(x => x.Property1)
.Containing("searchTerm")
.ToRanked();
排序搜尋,在多個屬性中搜尋單個搜尋詞
var result = queryableData.Search(x => x.Property1, x => x.Property2, x => x.Property3)
.Containing("searchTerm")
.ToRanked();
比對結果排序并傳回前面10條
var result = context.Users.Search(x => x.FirstName, x => x.LastName, x.MiddleName)
.Containing("John")
.ToRanked()
.OrderByDescending(r => r.Hits) // Order by Hits property of IRanked<User>
.Take(10);
四、Soundex搜尋
var result = data.SoundexOf(x => x.Property1, x => x.PropertyTwo)
.Matching("test", "another")
五、ReverseSoundex搜尋
var result = data.ReverseSoundexOf(x => x.Property1, x => x.PropertyTwo)
.Matching("test")
項目位址:https://github.com/ninjanye/SearchExtensions
- End -
推薦閱讀
- 基于.Net開發的對比Html效果差異的開源項目
- 一個基于.Net Core開源個人部落格網站
- 基于 .NET Core MVC 的權限管理系統
- 「最新」.Net程式員學習路線圖以及就業現狀
- 推薦基于.NET 6.0開發的開源訪客系統
- Net5開發的視訊監控管理系統