推荐一个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 -

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

相关文章
|
3月前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
150 1
|
13天前
|
C# 开发者 Windows
在VB.NET项目中使用C#编写的代码
在VB.NET项目中使用C#编写的代码
28 0
|
3月前
|
IDE C# 开发工具
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
128 6
|
3天前
|
C# Windows
C# 创建 Windows Service 项目
C# 创建 Windows Service 项目
13 1
|
19天前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
3月前
|
开发框架 .NET C#
C#学习相关系列之Linq用法---where和select用法(二)
C#学习相关系列之Linq用法---where和select用法(二)
152 2
|
1月前
|
存储 缓存 C#
C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏
C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏
C#语言编写的仅有8KB大小的简易贪吃蛇开源游戏
|
1月前
|
机器学习/深度学习 算法 搜索推荐
一个开源且全面的C#算法实战教程
一个开源且全面的C#算法实战教程
|
2月前
|
算法 C#
C#开源实用的工具类库,集成超过1000多种扩展方法
C#开源实用的工具类库,集成超过1000多种扩展方法
|
2月前
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
17 0