我有.Net Core 2.2
项目与MySql
的Linq2db
提供商。
如何在linq2db中使用全文索引进行搜索?
是否有可能生成任何数据库引擎,而不是特定于数据库的代码?
发布于 2019-11-30 04:17:27
可以这样做:
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-01-29 07:12:52
只要数据库支持一个可以支持大量文本的文本字段,那么您只需通过执行以下操作向该字段添加一个索引:
类MyContext : DbContext {公共DbSet博客{ get;set;}
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字节左右)。
https://stackoverflow.com/questions/54408134
复制相似问题