web-dev-qa-db-ja.com

EF Core 2.1の全文検索?

全文検索の使用を検討していますが、EF Core 2.1でそれを取得する方法について100%明確ではありません。

EF Core 2.1はフルテキスト検索の部分的なサポートを実装しているようですが、実際にそれを使用する方法についてのチュートリアルは見つかりません。

私の理解では、列の1つにフルテキストインデックスを追加する必要があります。

だから私がこのテーブルを持っているなら

public class Company {
    public string Name {get; set;}
}

public class CompanyConfig : IEntityTypeConfiguration<Company>
{
  public void Configure(EntityTypeBuilder<Company> builder)
        {
            builder.HasKey(x => x.Id);
            builder.Property(x => x.Name).HasMaxLength(100).IsRequired();
        }

}

Nameプロパティにフルテキストインデックスを追加するにはどうすればよいですか?

12
chobo2

現時点では、移行でSQL関数を使用して、手動で追加する必要があります。

全文索引の作成は、EF Core 2.1の時点ではまだ構築されていません。詳細については、この課題追跡を参照してください https://github.com/aspnet/EntityFrameworkCore/issues/11488

要約すれば;

EF Core 2.1では、LINQのFreeText述語による全文検索の初期サポートがありますが、これはすでにインデックスが作成されているデータベースでのみ機能します。 EF CoreとSQL Serverプロバイダーは、移行またはEnsureCreatedがインデックスを定義するための適切なSQLを生成できるようにモデルを構成する方法を提供していません。

https://github.com/aspnet/EntityFrameworkCore/commit/2a6ccad8821f9360ae753bce41d63811185b8912 ;のテストから抽出されたFreeTextのC#Linqクエリの例

using (var context = CreateContext())
{
    var result = await context
        .Employees
        .Where(c => EF.Functions.FreeText(c.Title, "Representative"))
        .ToListAsync(); 

        Assert.Equal(result.First().EmployeeID, 1u);

        Assert.Equal(
            @"SELECT [c].[EmployeeID], [c].[City], [c].[Country], [c].[FirstName], [c].[ReportsTo], [c].[Title] FROM [Employees] AS [c] WHERE FREETEXT([c].[Title], N'Representative')",
                    Sql,
                    ignoreLineEndingDifferences: true,
                    ignoreWhiteSpaceDifferences: true);
}
11
Ryan O'Neill