我可以使用 Npgsql 和 Entity Framework Core 设置 tsvector 字段的权重吗?

问题描述 投票:0回答:1

我正在 PostgresSql 表上设置全文搜索,并且我正在使用 Entity Framework Core。我已按照 here 的说明设置生成的 tsvector 列,一切都按预期工作。

这是定义生成列的代码:

  entity.HasGeneratedTsVectorColumn(
                    p => p.SearchVector,
                    "english",
                    p => new
                    {
                        p.Title,
                        p.Description,
                        p.Tags
                    })
                .HasIndex(p => p.SearchVector)
                .HasMethod("GIN");

现在我想在列上设置权重 - 实现与下面的代码等效的效果 - 以便标题的权重比其他字段更大

  ALTER TABLE books ADD COLUMN full_text_search_weighted TSVECTOR
    GENERATED ALWAYS AS (
      setweight(to_tsvector('english', coalesce(title, '')), 'A')),
      setweight(to_tsvector('english', coalesce(description, '')), 'B')),
      setweight(to_tsvector('english', coalesce(tags, '')), 'C'))
    ) STORED;

有没有办法使用 C#、Npgsql 和 Entity Framework Core 来实现,还是我需要编写完全自定义的迁移?

c# postgresql entity-framework-core full-text-search npgsql
1个回答
0
投票

不; HasGenerateTsVectorColumn() 实际上只是覆盖基本场景的糖;您可以下拉到 SQL 来执行您想要的任何自定义配置。但是,在迁移中完全没有必要这样做 - EF 允许您通过常规 Fluent API 使用任意 SQL 配置生成的列(请参阅文档)。

© www.soinside.com 2019 - 2024. All rights reserved.