在 Vertica 的数据库中全局创建倒排索引
Create inverted index globally within the database in Vertica
我想在存储在 Vertica 中的数据库中快速识别 table 和包含特定关键字的列。 Vertica 为全文搜索提供 Text Index 功能。但是,文本索引只能针对某个schema/relation建立,而不能建立整个数据库。
有谁知道在Vertica中是否有一种简单的方法可以为整个数据库建立倒排索引?
您不能创建跨多个对象的单个文本索引。每个索引仅是 table 上单个列的索引。
您也许可以通过在 table 列中查找列来生成您想要的创建(尽管诚实地完成它们是不寻常的)。不过,这假设每个 table 都有一个名为 id
的 PK。我只是想简化一下。
select 'create text index ' || table_schema || '.t_' || table_name || '_' || column_name
|| '_index on ' || table_schema || '.' || table_name
|| '(id,' || column_name || ');'
from columns
where data_type ilike '%char';
然后您可以创建一个从所有文本索引中进行选择的视图。不过,为了记录在案,我不知道这会有多好。人们会认为优化器会做它需要做的事情,但很难确定。这可以与上述查询类似地生成,完成后看起来像这样(请注意,如果您是分区,则需要为此添加一列)。
create view v_all_text_indexes
as
select 'schema1' schema_name, 'table1' table_name, 'column1' column_name, word, doc_id
from schema1.t_table1_column1_index
union all
select 'schema1' schema_name, 'table1' table_name, 'column2' column_name, word, doc_id
from schema1.t_table1_column2_index
.
.
.
select 'schema1' schema_name, 'tablen' table_name, 'columnn' column_name, word, doc_id
from schema1.t_tablen_columnn_index
不过,我不知道这对您的效果如何。 YMMV.
我想在存储在 Vertica 中的数据库中快速识别 table 和包含特定关键字的列。 Vertica 为全文搜索提供 Text Index 功能。但是,文本索引只能针对某个schema/relation建立,而不能建立整个数据库。
有谁知道在Vertica中是否有一种简单的方法可以为整个数据库建立倒排索引?
您不能创建跨多个对象的单个文本索引。每个索引仅是 table 上单个列的索引。
您也许可以通过在 table 列中查找列来生成您想要的创建(尽管诚实地完成它们是不寻常的)。不过,这假设每个 table 都有一个名为 id
的 PK。我只是想简化一下。
select 'create text index ' || table_schema || '.t_' || table_name || '_' || column_name
|| '_index on ' || table_schema || '.' || table_name
|| '(id,' || column_name || ');'
from columns
where data_type ilike '%char';
然后您可以创建一个从所有文本索引中进行选择的视图。不过,为了记录在案,我不知道这会有多好。人们会认为优化器会做它需要做的事情,但很难确定。这可以与上述查询类似地生成,完成后看起来像这样(请注意,如果您是分区,则需要为此添加一列)。
create view v_all_text_indexes
as
select 'schema1' schema_name, 'table1' table_name, 'column1' column_name, word, doc_id
from schema1.t_table1_column1_index
union all
select 'schema1' schema_name, 'table1' table_name, 'column2' column_name, word, doc_id
from schema1.t_table1_column2_index
.
.
.
select 'schema1' schema_name, 'tablen' table_name, 'columnn' column_name, word, doc_id
from schema1.t_tablen_columnn_index
不过,我不知道这对您的效果如何。 YMMV.