如何在UWP中的SQLite数据库中使用全文搜索

时间:2016-03-16 11:46:04

标签: full-text-search win-universal-app entity-framework-core

我有一个UWP项目,SQLiteEF7一起使用,我想知道我是否可以使用FTS(全文搜索) ?任何一个例子?

1 个答案:

答案 0 :(得分:3)

EF7 EF Core使用Microsoft.Data.Sqlite来为SQLite提供支持。此程序包在UWP上加载的SQLite 3版本支持FTS。

一般说明:所有平台都有以下情况,而不仅仅是UWP。

EF Core(从RC2开始)默认情况下会创建常规表,但您可以手动使其使用FTS。

如果您想使用FTS,则需要修改迁移和查询。

  1. 迁移/表格创建
  2. 默认情况下,迁移将创建常规表。要使用FTS,您需要改为制作FTS表。您可以通过手动编写迁移来实现此目的

    migrationBuilder.Sql(@"CREATE VIRTUAL TABLE enrondata1 USING fts3(content TEXT);") // FTS table
    migrationBuilder.Sql(@"CREATE TABLE enrondata2(content TEXT);"); // ordinary table
    

    如果您不使用迁移,则还需要显式提供此SQL。不要使用context.Database.EnsureCreate(),而是调用context.Database.ExecuteSqlCommand(string sql)来创建表格。

    1. 查询
    2. 默认情况下,EF Core会使用" LIKE"当它构造查询时。要利用FTS,您需要使用" MATCH"代替。

       context.EnronData2.FromSql(@"SELECT count(*) FROM enrondata1 WHERE content MATCH 'linux';"); // uses FTS search
       context.EnronData1.Where(e => e.Content.Contains("linux")); // uses regular, slow search
      

      有关详细信息,请参阅https://www.sqlite.org/fts3.html#section_1