You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework Core 7如何通过字段注解创建全文索引并查询?

EF Core 7 全文索引:字段注解方式创建与查询

能否通过字段注解创建全文索引?

EF Core 7 没有原生的DataAnnotation特性直接生成全文索引,但可以通过自定义注解标记字段,再配合迁移脚本完成创建,这是符合要求的字段注解方式。

实现步骤

  1. 定义自定义注解特性
[AttributeUsage(AttributeTargets.Property)]
public class FullTextIndexAttribute : Attribute { }
  1. 标记实体类字段
    在需要创建全文索引的字符串字段上添加该注解:
public class Article
{
    public int Id { get; set; }
    
    [FullTextIndex]
    public string Title { get; set; }
    
    [FullTextIndex]
    public string Content { get; set; }
}
  1. 生成并修改迁移文件
    执行迁移命令生成初始迁移文件:
dotnet ef migrations add AddFullTextIndexes

打开生成的迁移文件,在Up方法中添加数据库特定的全文索引创建语句(以SQL Server为例):

protected override void Up(MigrationBuilder migrationBuilder)
{
    // 保留自动生成的迁移代码
    
    // 创建全文目录
    migrationBuilder.Sql("CREATE FULLTEXT CATALOG ftDefaultCatalog AS DEFAULT;");
    
    // 为标记字段创建全文索引(关联表的主键索引)
    migrationBuilder.Sql("CREATE FULLTEXT INDEX ON Articles(Title, Content) KEY INDEX PK_Articles;");
}

如果是MySQL等其他数据库,需替换为对应语法(比如MySQL不需要单独创建目录,直接用ALTER TABLE ... ADD FULLTEXT INDEX)。

如何执行全文查询?

EF Core 7 支持两种主要方式查询全文索引:

1. 原生SQL查询(直接直观)

以SQL Server的CONTAINS函数为例:

var searchKeyword = "Entity Framework";
var matchedArticles = await _context.Articles
    .FromSqlInterpolated($"SELECT * FROM Articles WHERE CONTAINS((Title, Content), {searchKeyword})")
    .ToListAsync();

2. 映射数据库函数(LINQ风格)

先在DbContext中定义与数据库全文函数映射的方法:

[DbFunction("CONTAINS", IsBuiltIn = true)]
public static bool FullTextContains(string column, string searchTerm)
{
    throw new NotImplementedException("仅用于LINQ查询翻译,无需实现");
}

之后就可以用LINQ语法查询:

var searchKeyword = "Entity Framework";
var matchedArticles = await _context.Articles
    .Where(a => MyDbContext.FullTextContains(a.Title, searchKeyword) 
             || MyDbContext.FullTextContains(a.Content, searchKeyword))
    .ToListAsync();

不同数据库的全文函数不同,比如MySQL用MATCH ... AGAINST,需对应调整函数映射。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 03:12:18