我有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的全文本索引进行搜索?
是否可以使用任何数据库引擎,而不是特定于数据库的代码?
答案 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个字节)