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