【问题标题】:Postgres Full Text Search customize tsvector conversionPostgres全文搜索自定义tsvector转换
【发布时间】:2015-11-21 01:55:36
【问题描述】:

我想基于 id (1-111.1x) 和我的行的名称字段构建一个 tsvector,全部来自触发器并使用 tsvector_update_trigger(tsv, 'pg_catalog.german', id, name) .

但我的 id 最终会像“-111.1”而不是“1-111.1x”一样被截断。

有没有办法自定义转换,以便在正确转换名称字段的同时保留 id 字段(或应用某些操作,如 lower())?

类似这样的东西(这不起作用,因为 setweight 需要一个 tsvector)?

CREATE FUNCTION tsv_trigger() RETURNS trigger AS $$
begin
  new.tsv :=
     setweight(new.id, 'A') ||
     setweight(to_tsvector('pg_catalog.german', coalesce(new.name,'')), 'D');
  return new;
end
$$ LANGUAGE plpgsql;

CREATE TRIGGER TS_tsv
  BEFORE INSERT OR UPDATE ON "model"
FOR EACH ROW EXECUTE PROCEDURE
  tsv_trigger();

谢谢!

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    我最终创建了另一个字段“_id”,它是“id”的规范化表示(而不是“1-111”->“1111”)。然后必须去除搜索输入中的“-”、“.”,将它们替换为空字符串。

    当然我们需要小心,因为有时剥离某些字符可能不合适;我创建了一个正则表达式模式,它只在匹配的 id 中去除它们,而不是在文本中。

    就我而言,这似乎是一个可行的解决方案,尽管它只是一种解决方法。我很乐意提出真正的解决方案。

    【讨论】:

      猜你喜欢
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多