【问题标题】:How to make full text search with Linq2db?如何使用 Linq2db 进行全文搜索?
【发布时间】:2019-01-28 18:25:39
【问题描述】:

我有 .Net Core 2.2 项目,Linq2db 提供者为 MySql

如何通过 linq2db 使用全文索引进行搜索?

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

【问题讨论】:

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


【解决方案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

【讨论】:

    【解决方案2】:

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

    类 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 字节左右) .

    【讨论】:

    • 我知道它是如何由 MySql 制作的 - dev.mysql.com/doc/refman/5.7/en/fulltext-search.html ,那里写着 match-against 语法,不只是像。所以我认为这需要 sql 提供者的特殊翻译。可能这仅适用于MySql?或者我误解了什么。
    • 而在 MySql 中这个搜索需要特殊的全文索引。
    猜你喜欢
    • 1970-01-01
    • 2012-07-29
    • 2023-03-02
    • 2010-11-11
    • 2010-11-25
    • 2017-06-04
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多