全文索引/空间索引 - Pomelo.EFCore.MySql

Published on 7/27/2017 4:03:10 PM

背景

  • 全文索引(FULL TEXT):MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。
  • 空间索引(SPATIAL):空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息。
  • Pomelo.EntityFrameworkCore.MySql:一款第三方MySQL的Entity Framework Core驱动,在GitHub中开源,性能、功能、下载量均超过Oracle官方提供的版本。QQ群522943763。

使用

全文索引在7月28日被支持,需要安装 Pomelo.EntityFrameworkCore.MySql 2.0.0-preview3-10053 或更高版本。

创建TestModel

class TestModel
{
        public Guid Id { get; set; }

        public string Text { get; set; }
}

创建TestContext类,并使用Fluent API为TestModel中的Text字段添加索引以及全文索引

class TestContext : DbContext
{
        public DbSet<TestModel> TestModels { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
                base.OnModelCreating(modelBuilder);

                modelBuilder.Entity<TestModel>(e => 
                {
                        e.HasIndex(x => x.Text).ForMySqlIsFullText(); // 添加全文索引
                });
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
                base.OnConfiguring(optionsBuilder);

                optionsBuilder.UseMySql("server=localhost;uid=root;pwd=123456;database=fttest");
        }
}

即在欲添加全文索引的字段上使用.HasIndex().ForMySqlIsFullText()。空间索引则是.HasIndex().ForMySqlIsSpatial()

接下来在Main方法中调用DbContext来测试:

class Program
{
        static void Main(string[] args)
        {
                var db = new TestContext();
                db.Database.EnsureCreated();
                Console.WriteLine("Hello World!");
        }
}

在Navicat中我们可以看到,全文索引创建成功:

file

注意事项

  • .ForMySqlIsFullText().IsUnique().ForMySqlIsSpatial()不可同时使用,只能三选一。
  • InnoDB引擎的用户使用本功能需要MySQL 5.6或更高版本
分享到:

Comments

使用微信扫码