Skip to content

Commit 1083f2a

Browse files
authored
Merge pull request #238 from bigplaice/pg_textsearch
support pg_textsearch
2 parents 621d996 + e52c46b commit 1083f2a

File tree

4 files changed

+281
-100
lines changed

4 files changed

+281
-100
lines changed

CN/modules/ROOT/nav.adoc

Lines changed: 101 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,101 @@
1-
* xref:master/about_ivorysql.adoc[关于IvorySQL]
2-
** xref:master/welcome.adoc[欢迎]
3-
** xref:master/release_notes.adoc[发行说明]
4-
* 快速上手
5-
** xref:master/getting-started/quick_start.adoc[快速开始]
6-
* 安装部署
7-
** xref:master/installation_guide.adoc[安装指南]
8-
** xref:master/cluster_setup.adoc[集群搭建]
9-
* Oracle兼容功能
10-
** xref:master/oracle_compatibility/compat_case_conversion.adoc[1、大小写转换]
11-
** xref:master/oracle_compatibility/compat_like_operator.adoc[2、LIKE操作符]
12-
** xref:master/oracle_compatibility/anonymous_block.adoc[3、匿名块]
13-
** xref:master/oracle_compatibility/compat_function_procedure.adoc[4、函数与存储过程]
14-
** xref:master/oracle_compatibility/builtin_types_functions.adoc[5、内置数据类型与内置函数]
15-
** xref:master/oracle_compatibility/port_ip.adoc[6、端口与IP]
16-
** xref:master/oracle_compatibility/xml_functions.adoc[7、XML函数]
17-
** xref:master/oracle_compatibility/sequence.adoc[8、sequence]
18-
** xref:master/oracle_compatibility/package.adoc[9、包]
19-
** xref:master/oracle_compatibility/invisible_column.adoc[10、不可见列]
20-
** xref:master/oracle_compatibility/compat_rowid.adoc[11、RowID]
21-
** xref:master/oracle_compatibility/compat_out_parameter.adoc[12、OUT 参数]
22-
** xref:master/oracle_compatibility/compat_type_rowtype.adoc[13、%TYPE、%ROWTYPE]
23-
** xref:master/oracle_compatibility/compat_nls_parameter.adoc[14、NLS 参数]
24-
** xref:master/oracle_compatibility/compat_force_view.adoc[15、Force View]
25-
** xref:master/oracle_compatibility/compat_nested_function.adoc[16、嵌套子函数]
26-
** xref:master/oracle_compatibility/compat_sys_guid.adoc[17、sys_guid 函数]
27-
** xref:master/oracle_compatibility/compat_empty_string_to_null.adoc[18、空字符串转null]
28-
** xref:master/oracle_compatibility/compat_call_into.adoc[19、CALL INTO]
29-
* 容器化与云服务
30-
** 容器化指南
31-
*** xref:master/containerization/k8s_deployment.adoc[K8S部署]
32-
*** xref:master/containerization/operator_deployment.adoc[Operator部署]
33-
*** xref:master/containerization/docker_podman_deployment.adoc[Docker & Podman部署]
34-
*** xref:master/containerization/docker_swarm_compose_deployment.adoc[Docker Swarm & Docker Compose部署]
35-
** 云服务平台指南
36-
*** xref:master/cloud_platform/ivorysql_cloud_installation.adoc[IvorySQL Cloud安装]
37-
*** xref:master/cloud_platform/ivorysql_cloud_usage.adoc[IvorySQL Cloud使用]
38-
* IvorySQL生态
39-
** xref:master/cpu_os_adaptation/cpu_architecture_adaptation.adoc[芯片架构适配]
40-
** xref:master/cpu_os_adaptation/os_architecture_adaptation.adoc[操作系统适配]
41-
** 生态组件适配
42-
*** xref:master/ecosystem_components/ecosystem_overview.adoc[概述]
43-
*** xref:master/ecosystem_components/postgis.adoc[postgis]
44-
*** xref:master/ecosystem_components/pgvector.adoc[pgvector]
45-
*** xref:master/ecosystem_components/pgddl.adoc[pgddl(DDL Extractor)]
46-
*** xref:master/ecosystem_components/pg_cron.adoc[pg_cron]
47-
*** xref:master/ecosystem_components/pgsql_http.adoc[pgsql-http]
48-
*** xref:master/ecosystem_components/plpgsql_check.adoc[plpgsql_check]
49-
*** xref:master/ecosystem_components/pgroonga.adoc[pgroonga]
50-
*** xref:master/ecosystem_components/pgaudit.adoc[pgaudit]
51-
*** xref:master/ecosystem_components/pgrouting.adoc[pgrouting]
52-
*** xref:master/ecosystem_components/system_stats.adoc[system_stats]
53-
*** xref:master/ecosystem_components/wal2json.adoc[wal2json]
54-
*** xref:master/ecosystem_components/pg_stat_monitor.adoc[pg_stat_monitor]
55-
*** xref:master/ecosystem_components/pg_ai_query.adoc[pg_ai_query]
56-
*** xref:master/ecosystem_components/pg_partman.adoc[pg_partman]
57-
*** xref:master/ecosystem_components/pgbouncer.adoc[pgbouncer]
58-
*** xref:master/ecosystem_components/pg_curl.adoc[pg_curl]
59-
* 监控运维
60-
** xref:master/getting-started/daily_monitoring.adoc[日常监控]
61-
** xref:master/getting-started/daily_maintenance.adoc[日常维护]
62-
** xref:master/operation_guide.adoc[运维管理指南]
63-
* 数据迁移
64-
** xref:master/migration_guide.adoc[迁移指南]
65-
* IvorySQL开发者
66-
** xref:master/contribution/community_contribution_guide.adoc[社区贡献指南]
67-
** xref:master/developer_guide.adoc[开发者指南]
68-
** IvorySQL架构设计
69-
*** 查询处理
70-
**** xref:master/architecture/dual_parser.adoc[双parser]
71-
*** 兼容框架
72-
**** xref:master/architecture/framework_design.adoc[框架设计]
73-
**** xref:master/architecture/guc_framework.adoc[GUC框架]
74-
**** xref:master/architecture/dual_mode_design.adoc[双模式设计]
75-
**** xref:master/architecture/initdb_process.adoc[initdb过程]
76-
*** 兼容特性
77-
**** xref:master/compatibility_features_design/like_operator.adoc[like]
78-
**** xref:master/compatibility_features_design/rowid.adoc[RowID]
79-
**** xref:master/compatibility_features_design/out_parameter.adoc[OUT 参数]
80-
**** xref:master/compatibility_features_design/type_rowtype.adoc[%TYPE、%ROWTYPE]
81-
**** xref:master/compatibility_features_design/nls_parameter.adoc[NLS 参数]
82-
**** xref:master/compatibility_features_design/function_procedure.adoc[函数与存储过程]
83-
**** xref:master/compatibility_features_design/nested_function.adoc[嵌套子函数]
84-
**** xref:master/compatibility_features_design/force_view.adoc[Force View]
85-
**** xref:master/compatibility_features_design/case_conversion.adoc[大小写转换]
86-
**** xref:master/compatibility_features_design/sys_guid_function.adoc[sys_guid 函数]
87-
**** xref:master/compatibility_features_design/empty_string_to_null.adoc[空字符串转null]
88-
**** xref:master/compatibility_features_design/call_into.adoc[CALL INTO]
89-
*** 内置函数
90-
**** xref:master/oracle_builtin_functions/sys_context.adoc[sys_context]
91-
**** xref:master/oracle_builtin_functions/userenv.adoc[userenv]
92-
*** xref:master/gb18030.adoc[国标GB18030]
93-
* 参考指南
94-
** xref:master/tools_reference.adoc[工具参考]
95-
** xref:master/contribution/asciidoc_syntax_reference.adoc[asciidoc语法快速参考]
96-
** xref:master/pg_reference/pg_parameters_reference.adoc[PG参数参考手册]
97-
** xref:master/pg_reference/pg_functions_reference.adoc[PG函数参考手册]
98-
* 常见问题解答
99-
** xref:master/contribution/faq.adoc[FAQ]
100-
1+
* xref:master/about_ivorysql.adoc[关于IvorySQL]
2+
** xref:master/welcome.adoc[欢迎]
3+
** xref:master/release_notes.adoc[发行说明]
4+
* 快速上手
5+
** xref:master/getting-started/quick_start.adoc[快速开始]
6+
* 安装部署
7+
** xref:master/installation_guide.adoc[安装指南]
8+
** xref:master/cluster_setup.adoc[集群搭建]
9+
* Oracle兼容功能
10+
** xref:master/oracle_compatibility/compat_case_conversion.adoc[1、大小写转换]
11+
** xref:master/oracle_compatibility/compat_like_operator.adoc[2、LIKE操作符]
12+
** xref:master/oracle_compatibility/anonymous_block.adoc[3、匿名块]
13+
** xref:master/oracle_compatibility/compat_function_procedure.adoc[4、函数与存储过程]
14+
** xref:master/oracle_compatibility/builtin_types_functions.adoc[5、内置数据类型与内置函数]
15+
** xref:master/oracle_compatibility/port_ip.adoc[6、端口与IP]
16+
** xref:master/oracle_compatibility/xml_functions.adoc[7、XML函数]
17+
** xref:master/oracle_compatibility/sequence.adoc[8、sequence]
18+
** xref:master/oracle_compatibility/package.adoc[9、包]
19+
** xref:master/oracle_compatibility/invisible_column.adoc[10、不可见列]
20+
** xref:master/oracle_compatibility/compat_rowid.adoc[11、RowID]
21+
** xref:master/oracle_compatibility/compat_out_parameter.adoc[12、OUT 参数]
22+
** xref:master/oracle_compatibility/compat_type_rowtype.adoc[13、%TYPE、%ROWTYPE]
23+
** xref:master/oracle_compatibility/compat_nls_parameter.adoc[14、NLS 参数]
24+
** xref:master/oracle_compatibility/compat_force_view.adoc[15、Force View]
25+
** xref:master/oracle_compatibility/compat_nested_function.adoc[16、嵌套子函数]
26+
** xref:master/oracle_compatibility/compat_sys_guid.adoc[17、sys_guid 函数]
27+
** xref:master/oracle_compatibility/compat_empty_string_to_null.adoc[18、空字符串转null]
28+
** xref:master/oracle_compatibility/compat_call_into.adoc[19、CALL INTO]
29+
* 容器化与云服务
30+
** 容器化指南
31+
*** xref:master/containerization/k8s_deployment.adoc[K8S部署]
32+
*** xref:master/containerization/operator_deployment.adoc[Operator部署]
33+
*** xref:master/containerization/docker_podman_deployment.adoc[Docker & Podman部署]
34+
*** xref:master/containerization/docker_swarm_compose_deployment.adoc[Docker Swarm & Docker Compose部署]
35+
** 云服务平台指南
36+
*** xref:master/cloud_platform/ivorysql_cloud_installation.adoc[IvorySQL Cloud安装]
37+
*** xref:master/cloud_platform/ivorysql_cloud_usage.adoc[IvorySQL Cloud使用]
38+
* IvorySQL生态
39+
** xref:master/cpu_os_adaptation/cpu_architecture_adaptation.adoc[芯片架构适配]
40+
** xref:master/cpu_os_adaptation/os_architecture_adaptation.adoc[操作系统适配]
41+
** 生态组件适配
42+
*** xref:master/ecosystem_components/ecosystem_overview.adoc[概述]
43+
*** xref:master/ecosystem_components/postgis.adoc[postgis]
44+
*** xref:master/ecosystem_components/pgvector.adoc[pgvector]
45+
*** xref:master/ecosystem_components/pgddl.adoc[pgddl(DDL Extractor)]
46+
*** xref:master/ecosystem_components/pg_cron.adoc[pg_cron]
47+
*** xref:master/ecosystem_components/pgsql_http.adoc[pgsql-http]
48+
*** xref:master/ecosystem_components/plpgsql_check.adoc[plpgsql_check]
49+
*** xref:master/ecosystem_components/pgroonga.adoc[pgroonga]
50+
*** xref:master/ecosystem_components/pgaudit.adoc[pgaudit]
51+
*** xref:master/ecosystem_components/pgrouting.adoc[pgrouting]
52+
*** xref:master/ecosystem_components/system_stats.adoc[system_stats]
53+
*** xref:master/ecosystem_components/wal2json.adoc[wal2json]
54+
*** xref:master/ecosystem_components/pg_stat_monitor.adoc[pg_stat_monitor]
55+
*** xref:master/ecosystem_components/pg_ai_query.adoc[pg_ai_query]
56+
*** xref:master/ecosystem_components/pg_partman.adoc[pg_partman]
57+
*** xref:master/ecosystem_components/pgbouncer.adoc[pgbouncer]
58+
*** xref:master/ecosystem_components/pg_curl.adoc[pg_curl]
59+
*** xref:master/ecosystem_components/pg_textsearch.adoc[pg_textsearch]
60+
* 监控运维
61+
** xref:master/getting-started/daily_monitoring.adoc[日常监控]
62+
** xref:master/getting-started/daily_maintenance.adoc[日常维护]
63+
** xref:master/operation_guide.adoc[运维管理指南]
64+
* 数据迁移
65+
** xref:master/migration_guide.adoc[迁移指南]
66+
* IvorySQL开发者
67+
** xref:master/contribution/community_contribution_guide.adoc[社区贡献指南]
68+
** xref:master/developer_guide.adoc[开发者指南]
69+
** IvorySQL架构设计
70+
*** 查询处理
71+
**** xref:master/architecture/dual_parser.adoc[双parser]
72+
*** 兼容框架
73+
**** xref:master/architecture/framework_design.adoc[框架设计]
74+
**** xref:master/architecture/guc_framework.adoc[GUC框架]
75+
**** xref:master/architecture/dual_mode_design.adoc[双模式设计]
76+
**** xref:master/architecture/initdb_process.adoc[initdb过程]
77+
*** 兼容特性
78+
**** xref:master/compatibility_features_design/like_operator.adoc[like]
79+
**** xref:master/compatibility_features_design/rowid.adoc[RowID]
80+
**** xref:master/compatibility_features_design/out_parameter.adoc[OUT 参数]
81+
**** xref:master/compatibility_features_design/type_rowtype.adoc[%TYPE、%ROWTYPE]
82+
**** xref:master/compatibility_features_design/nls_parameter.adoc[NLS 参数]
83+
**** xref:master/compatibility_features_design/function_procedure.adoc[函数与存储过程]
84+
**** xref:master/compatibility_features_design/nested_function.adoc[嵌套子函数]
85+
**** xref:master/compatibility_features_design/force_view.adoc[Force View]
86+
**** xref:master/compatibility_features_design/case_conversion.adoc[大小写转换]
87+
**** xref:master/compatibility_features_design/sys_guid_function.adoc[sys_guid 函数]
88+
**** xref:master/compatibility_features_design/empty_string_to_null.adoc[空字符串转null]
89+
**** xref:master/compatibility_features_design/call_into.adoc[CALL INTO]
90+
*** 内置函数
91+
**** xref:master/oracle_builtin_functions/sys_context.adoc[sys_context]
92+
**** xref:master/oracle_builtin_functions/userenv.adoc[userenv]
93+
*** xref:master/gb18030.adoc[国标GB18030]
94+
* 参考指南
95+
** xref:master/tools_reference.adoc[工具参考]
96+
** xref:master/contribution/asciidoc_syntax_reference.adoc[asciidoc语法快速参考]
97+
** xref:master/pg_reference/pg_parameters_reference.adoc[PG参数参考手册]
98+
** xref:master/pg_reference/pg_functions_reference.adoc[PG函数参考手册]
99+
* 常见问题解答
100+
** xref:master/contribution/faq.adoc[FAQ]
101+
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= pg_textsearch
6+
7+
== 概述
8+
pg_textsearch 是由Timescale团队开发的一个PostgreSQL扩展,旨在为Postgres提供高性能、现代化的全文搜索能力,并针对AI工作负载和混合搜索进行了优化。
9+
10+
== 安装
11+
12+
[TIP]
13+
源码安装环境为 Ubuntu 24.04(x86_64),环境中已经安装了IvorySQL5及以上版本,安装路径为/usr/ivory-5
14+
15+
=== 源码安装
16+
17+
[literal]
18+
----
19+
# 从 https://github.com/timescale/pg_textsearch/archive/refs/tags/v0.6.1.tar.gz 下载源码包
20+
21+
tar xzvf v0.6.1.tar.gz
22+
cd pg_textsearch-0.6.1
23+
24+
# 编译安装插件
25+
make PG_CONFIG=/usr/ivory-5/bin/pg_config
26+
make PG_CONFIG=/usr/ivory-5/bin/pg_config install
27+
28+
----
29+
30+
[TIP]
31+
如果出现找不到xlocale.h的错误,需要手动修改 /usr/ivory-5/include/postgresql/server/pg_config.h
32+
删除或者注释掉 #define HAVE_XLOCALE_H 1 这一行
33+
34+
=== 修改数据库配置文件
35+
36+
修改 ivorysql.conf 文件,添加 pg_textsearch 到 shared_preload_libraries
37+
38+
[literal]
39+
----
40+
shared_preload_libraries = 'gb18030_2022, liboracle_parser, ivorysql_ora, pg_textsearch'
41+
----
42+
43+
重启数据库后配置生效。
44+
45+
=== 创建Extension
46+
47+
[literal]
48+
----
49+
postgres=# create extension pg_textsearch;
50+
WARNING: pg_textsearch v0.6.1 is a prerelease. Do not use in production.
51+
CREATE EXTENSION
52+
----
53+
54+
== 使用
55+
56+
创建一个带有文本内容的表:
57+
[literal]
58+
----
59+
postgres=# CREATE TABLE documents (id bigserial PRIMARY KEY, content text);
60+
CREATE TABLE
61+
62+
postgres=# INSERT INTO documents (content) VALUES
63+
('PostgreSQL is a powerful database system'),
64+
('BM25 is an effective ranking function'),
65+
('Full text search with custom scoring');
66+
INSERT 0 3
67+
----
68+
69+
在文本列上创建 pg_textsearch 索引:
70+
[literal]
71+
----
72+
postgres=# CREATE INDEX docs_idx ON documents USING bm25(content) WITH (text_config='english');
73+
NOTICE: BM25 index build started for relation docs_idx
74+
NOTICE: Using text search configuration: english
75+
NOTICE: Using index options: k1=1.20, b=0.75
76+
NOTICE: BM25 index build completed: 3 documents, avg_length=4.33
77+
CREATE INDEX
78+
----
79+
80+
使用@操作符获取最相关的文档:
81+
[literal]
82+
----
83+
postgres=# SELECT * FROM documents ORDER BY content <@> 'database system' LIMIT 5;
84+
id | content
85+
----+------------------------------------------
86+
1 | PostgreSQL is a powerful database system
87+
2 | BM25 is an effective ranking function
88+
3 | Full text search with custom scoring
89+
(3 rows)
90+
----
91+

EN/modules/ROOT/nav.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
*** xref:master/ecosystem_components/pg_partman.adoc[pg_partman]
5757
*** xref:master/ecosystem_components/pgbouncer.adoc[pgbouncer]
5858
*** xref:master/ecosystem_components/pg_curl.adoc[pg_curl]
59+
*** xref:master/ecosystem_components/pg_textsearch.adoc[pg_textsearch]
5960
* Monitor and O&M
6061
** xref:master/getting-started/daily_monitoring.adoc[Monitoring]
6162
** xref:master/getting-started/daily_maintenance.adoc[Maintenance]
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
2+
:sectnums:
3+
:sectnumlevels: 5
4+
5+
= pg_textsearch
6+
7+
== Overview
8+
pg_textsearch is a PostgreSQL extension developed by the Timescale team. It is designed to provide high-performance, modern full-text search capabilities for Postgres, and is optimized for AI workloads and hybrid search.
9+
10+
== Installation
11+
12+
[TIP]
13+
The source code installation environment is Ubuntu 24.04 (x86_64), in which IvorySQL 5 or a later version has been installed. The installation path is /usr/ivory-5.
14+
15+
=== Source Code Installation
16+
17+
[literal]
18+
----
19+
# download source code package from: https://github.com/timescale/pg_textsearch/archive/refs/tags/v0.6.1.tar.gz
20+
21+
tar xzvf v0.6.1.tar.gz
22+
cd pg_textsearch-0.6.1
23+
24+
# compile and install the extension
25+
make PG_CONFIG=/usr/ivory-5/bin/pg_config
26+
make PG_CONFIG=/usr/ivory-5/bin/pg_config install
27+
----
28+
29+
[TIP]
30+
If there is error "xlocale.h: No such file or directory" during compilation, user should remove the
31+
line of "#define HAVE_XLOCALE_H 1" from file /usr/ivory-5/include/postgresql/server/pg_config.h.
32+
33+
=== Modify the configuration file
34+
35+
Modify the ivorysql.conf file to add pg_textsearch into shared_preload_libraries.
36+
[literal]
37+
----
38+
shared_preload_libraries = 'gb18030_2022, liboracle_parser, ivorysql_ora, pg_textsearch'
39+
----
40+
41+
Then restart the database.
42+
43+
=== Create Extension
44+
45+
[literal]
46+
----
47+
postgres=# create extension pg_textsearch;
48+
WARNING: pg_textsearch v0.6.1 is a prerelease. Do not use in production.
49+
CREATE EXTENSION
50+
----
51+
52+
== Use
53+
54+
Create a table with text content:
55+
[literal]
56+
----
57+
postgres=# CREATE TABLE documents (id bigserial PRIMARY KEY, content text);
58+
CREATE TABLE
59+
60+
postgres=# INSERT INTO documents (content) VALUES
61+
('PostgreSQL is a powerful database system'),
62+
('BM25 is an effective ranking function'),
63+
('Full text search with custom scoring');
64+
INSERT 0 3
65+
----
66+
67+
Create a pg_textsearch index on the text column:
68+
[literal]
69+
----
70+
postgres=# CREATE INDEX docs_idx ON documents USING bm25(content) WITH (text_config='english');
71+
NOTICE: BM25 index build started for relation docs_idx
72+
NOTICE: Using text search configuration: english
73+
NOTICE: Using index options: k1=1.20, b=0.75
74+
NOTICE: BM25 index build completed: 3 documents, avg_length=4.33
75+
CREATE INDEX
76+
----
77+
78+
Get the most relevant documents using the <@> operator:
79+
[literal]
80+
----
81+
postgres=# SELECT * FROM documents ORDER BY content <@> 'database system' LIMIT 5;
82+
id | content
83+
----+------------------------------------------
84+
1 | PostgreSQL is a powerful database system
85+
2 | BM25 is an effective ranking function
86+
3 | Full text search with custom scoring
87+
(3 rows)
88+
----

0 commit comments

Comments
 (0)