1

我有.Net Core 2.2Linq2db提供商合作的项目MySql

如何使用带有 linq2db 的全文索引进行搜索?

是否可以为任何数据库引擎而不是数据库特定代码制作?

4

2 回答 2

1

可以这样做:

using (var linqdb = new DatabaseModel())
{
    string searchFT = "wordToSearch*";
    List<TableClass> items = linqdb.GetTable<TableClass>().Where(wo => Sql.Ext.MySql().Match(MySqlExtensions.MatchModifier.Boolean, searchFT, wo.FistName, wo.LastName)).ToList();
}

这是文档的链接: https ://linq2db.github.io/api/LinqToDB.DataProvider.MySql.MySqlExtensions.html

一个例子可以在这里找到: https ://github.com/linq2db/linq2db/blob/master/Tests/Linq/Linq/FullTextTests.MySql.cs

于 2019-11-29T20:17:26.980 回答
0

只要数据库支持可以支持大量文本的文本字段,那么您只需通过执行以下操作向该字段添加索引:

类 MyContext : DbContext { 公共 DbSet 博客 { 获取;放; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .HasIndex(b => b.Url);
}

}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

在 EF 核心中,如果您在 Where 函数中使用 StartsWith、Contains 或 EF.Functions.Like 之类的东西,那么我相信这会被转换为 SQL 中的 Like。因此,在 EF 核心中,这将使用您对此类数据库中的字段的全文搜索。

我认为 linq2db 应该是一样的...

所以是的,这对于任何数据库都是通用的。

但是,正如我曾经使用 SQLite 发现的那样,由于数据库不支持它,因此我无法将索引添加到具有大量数据的文本字段中……(从内存中它大致限制在 1000 字节左右)。

于 2019-01-28T23:12:52.377 回答