全文搜索新手,我有一个feed_items表如下
feed_items (...title varchar, summary varchar, fullarticle varchar,...)
如果在标题中找到查询,我想创建一个 ts_vector 列来从标题或摘要中搜索具有更高优先级的查询。
选项 1 我可以创建一个生成的列,如下所示
ALTER TABLE feed_items
ADD COLUMN textsearchable_index_col tsvector
GENERATED ALWAYS AS (to_tsvector('english', coalesce(title, '') || ' ' || coalesce(summary, ''))) STORED;
选项2 我可以像这样在插入或更新后创建触发器,下面的示例并不完美,我为title_vector和summary_vector创建了一个单独的列,但我认为我需要将它们合并到一个列中,然后决定如何更加重视在标题中找到的查询
ALTER TABLE "feed_items"
ADD IF NOT EXISTS "title_vector" tsvector;
COMMENT ON COLUMN "feed_items"."title_vector" IS $pga$vector representation of title$pga$;
UPDATE feed_items SET title_vector = to_tsvector('english', title);
CREATE INDEX "idx_title_vector" ON "feed_items" USING gin ("title_vector");
CREATE TRIGGER "trigger_update_title_vector"
BEFORE INSERT OR UPDATE ON "feed_items"
FOR EACH ROW
EXECUTE PROCEDURE "tsvector_update_trigger"($pga$title_vector$pga$, $pga$pg_catalog.english$pga$, $pga$title$pga$);
我的主要问题是两者之间有什么区别?我应该使用哪一个?