推荐一个C#全文搜索支持Linq表达式的开源项目

简介: 一个IQueryable与IEnumerable扩展方法库

上次给大家推荐过一个基于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 -

专注分享编程知识、热门有用有趣的开源项目

相关文章
|
7月前
|
开发框架 安全 .NET
掌握 LINQ:通过示例解释 C# 中强大的 LINQ的集运算
通过本文的示例,我们详细介绍了C#中LINQ的强大集合运算功能。LINQ提供了一种简洁、灵活和类型安全的方式来查询和操作数据集合,从而大大提高了代码的可读性和可维护性。希望本文能帮助读者更好地掌握和应用LINQ,提高开发效率。
193 13
|
8月前
|
C# 开发工具 C++
code runner 运行C#项目
本文介绍了如何修改Code Runner设置使 Visual Studio Code (VS Code) 能直接运行完整的 C# 项目。传统方式依赖 cscript 工具,仅支持 .csx 文件,功能受限且已停止维护。新配置使用 `dotnet run` 命令,结合一系列炫酷的cmd指令,将指令定位到具体的csproj文件上进行运行。
393 38
|
C# 开发者 Windows
在VB.NET项目中使用C#编写的代码
在VB.NET项目中使用C#编写的代码
150 0
|
9月前
|
Linux C# iOS开发
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
200 12
|
10月前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
316 3
|
10月前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
307 3
|
11月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
188 1
|
10月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
347 0
|
开发框架 自然语言处理 .NET
C#一分钟浅谈:LINQ 查询表达式的使用技巧
【9月更文挑战第6天】LINQ(Language Integrated Query)是C#开发中的强大工具,使查询数据集合变得简单且接近自然语言。本文从基础入手,通过具体示例讲解LINQ查询表达式的使用技巧,包括过滤、排序和分组等操作。同时,文章还探讨了常见问题及解决方法,如性能优化、过早枚举和类型转换等,帮助开发者写出更高效、易维护的代码。
229 16
|
C#
C#一分钟浅谈:Lambda 表达式和匿名方法
本文详细介绍了C#编程中的Lambda表达式与匿名方法,两者均可用于定义无名函数,使代码更简洁易维护。文章通过基础概念讲解和示例对比,展示了各自语法特点,如Lambda表达式的`(parameters) =&gt; expression`形式及匿名方法的`delegate(parameters)`结构。并通过实例演示了两者的应用差异,强调了在使用Lambda时应注意闭包问题及其解决策略,推荐优先使用Lambda表达式以增强代码可读性。
166 9