PostgreSQL Elasticsearch FDW:高效集成搜索与数据库
项目介绍
PostgreSQL Elasticsearch FDW
是一个强大的开源工具,它允许用户在Elasticsearch中索引数据,并从PostgreSQL中进行搜索。通过这个工具,用户不仅可以读取数据,还可以进行写操作,实现了数据库与搜索引擎的无缝集成。
项目技术分析
技术栈
- Elasticsearch: 作为数据索引和搜索的核心引擎。
- PostgreSQL: 作为关系型数据库,提供数据存储和管理功能。
- Multicorn: 一个PostgreSQL扩展,允许用户创建自定义的外部数据包装器(FDW)。
- Python: 用于编写和安装Elasticsearch客户端及FDW。
版本支持
项目支持多个版本的Elasticsearch和PostgreSQL,具体如下:
| Elasticsearch | 依赖安装命令 | |---------------|--------------| | 5 | sudo pip install "elasticsearch>=5,<6"
| | 6 | sudo pip install "elasticsearch>=6,<7"
| | 7 | sudo pip install "elasticsearch>=7,<8"
|
| PostgreSQL | 依赖安装命令 | |------------|--------------| | 9.4 | sudo apt-get install postgresql-9.4-python-multicorn
| | 9.5 | sudo apt-get install postgresql-9.5-python-multicorn
| | 9.6 | sudo apt-get install postgresql-9.6-python-multicorn
| | 10 | sudo apt-get install postgresql-10-python-multicorn
| | 11 | sudo apt-get install postgresql-11-python-multicorn
| | 12 | sudo apt-get install postgresql-12-python3-multicorn
| | 13 | sudo apt-get install postgresql-13-python3-multicorn
|
对于PostgreSQL 13及以上版本,推荐使用Multicorn 2,这是一个积极维护的版本。
安装步骤
- 安装系统级依赖:
sudo apt-get install python python-pip
- 根据PostgreSQL版本安装相应的Multicorn。
- 安装Elasticsearch客户端依赖。
- 使用pip安装FDW:
sudo pip install pg_es_fdw
项目及技术应用场景
应用场景
- 全文搜索:在数据库中存储结构化数据,同时利用Elasticsearch进行高效的全文搜索。
- 实时分析:结合PostgreSQL的事务处理能力和Elasticsearch的实时搜索能力,进行实时数据分析。
- 数据集成:将多个数据源的数据集成到一个统一的搜索平台中。
技术优势
- 高效搜索:利用Elasticsearch的强大搜索能力,实现快速的全文搜索。
- 数据一致性:通过FDW,确保数据库与搜索引擎之间的数据一致性。
- 灵活配置:支持多种配置选项,如排序、刷新策略、查询语法等,满足不同场景的需求。
项目特点
主要特点
- 双向操作:支持从PostgreSQL读取和写入数据到Elasticsearch。
- 版本兼容性:支持多个版本的Elasticsearch和PostgreSQL,确保广泛的适用性。
- 灵活查询:支持URI Search和Query DSL两种查询语法,满足不同的查询需求。
- 性能优化:通过配置选项,如
refresh
和complete_returning
,优化性能。
使用示例
创建服务器和外部表
CREATE EXTENSION multicorn;
CREATE SERVER multicorn_es FOREIGN DATA WRAPPER multicorn
OPTIONS (
wrapper 'pg_es_fdw.ElasticsearchFDW'
);
CREATE FOREIGN TABLE articles_es
(
id BIGINT,
title TEXT,
body TEXT,
metadata JSON,
query TEXT,
score NUMERIC,
sort TEXT
)
SERVER multicorn_es
OPTIONS
(
host 'elasticsearch',
port '9200',
index 'article-index',
type 'article',
rowid_column 'id',
query_column 'query',
query_dsl 'false',
score_column 'score',
default_sort 'last_updated:desc',
sort_column 'sort',
refresh 'false',
complete_returning 'false',
timeout '20',
username 'elastic',
password 'changeme'
);
插入数据
INSERT INTO articles_es
(
id,
title,
body,
metadata
)
VALUES
(
1,
'foo',
'spike',
'{"score": 3}'::json
);
查询数据
SELECT
id,
title,
body,
metadata
FROM
articles_es
WHERE
query = 'body:chess';
通过PostgreSQL Elasticsearch FDW
,您可以轻松地将Elasticsearch的强大搜索能力与PostgreSQL的数据管理功能结合起来,实现高效的数据处理和搜索。无论是全文搜索、实时分析还是数据集成,这个工具都能为您提供强大的支持。立即尝试,体验其带来的便利和效率提升!