如何使用Linq2db进行全文搜索?

时间:2019-01-28 18:25:39

标签: .net database search .net-core linq2db

我有paths.each do |path| if path =~ /^2A_/ new_path = path.sub /^2A_/, "2A_Vendor_" File.rename path, new_path end end 个项目,.Net Core 2.2的提供者是Linq2db

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

是否可以使用任何数据库引擎,而不是特定于数据库的代码?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

Class MyContext:DbContext {     公共DbSet博客{get;组; }

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个字节)