推荐一个C#全文搜索支持Linq表达式的开源项目
上次给大家推荐过一个基于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 -
推荐阅读
相关文章
- 电脑键盘指法+常用快捷键文字及图片详解
- 机械键盘灯亮按键无反应(机械键盘灯亮按键无反应什么原因)
- Keychron Q14 Max键盘开售:小键盘左置、Alice配列,1298元起
- Keychron K15 Max矮轴机械键盘开售:75%Alice配列,567元起
- 单手35键设计,Keychron旗下Lemokey推出X0机械键盘
- 线上故障排查全套路盘点,运维大哥请自查
- 学习Pandas中操作Excel,看这一篇文章就够了
- 对不起,我把APP也给爬了(对不起我把你弄脏)
- Navigating global shifts and forging a path for emerging economies
- 多目标追踪小抄:快速了解MOT的基本概念