Redisearch简单使用
Redisearch 是一个基于 Redis 的高性能搜索引擎,可以在 Redis 数据结构上实现全文搜索功能。下面是一个简单的教程,介绍如何使用 Redisearch 进行中文搜索,并使用 PHP 语言进行一些简单的DEMO示例
安装 Redisearch
首先,你需要在 Redis 服务器上安装 Redisearch 模块。请参考 Redisearch 的 GitHub 页面 获取安装说明。
使用 Docker 安装 RedisSearch 非常简单。以下是步骤:
1. 获取 RedisSearch Docker 镜像
首先,确保系统已安装 Docker,然后运行以下命令来拉取 RedisSearch 镜像:
docker pull redislabs/redisearch
2. 启动 RedisSearch 容器
使用以下命令运行 RedisSearch 容器,并将 Redis 服务映射到本地的 6379 端口:
docker run -it -d -p 6379:6379 --name redis-search redislabs/redisearch:latest
3. 验证安装
通过以下命令检查 Redis 模块是否安装成功。出现 search
模块表示成功:
127.0.0.1:6379> MODULE LIST
1) 1) "name"
2) "ReJSON"
3) "ver"
4) (integer) 999999
2) 1) "name"
2) "search"
3) "ver"
4) (integer) 20613
创建索引
使用 Redisearch 进行搜索之前,需要先为数据创建索引。下面是一个使用 Redis 命令行工具创建索引的示例:
FT.CREATE myIndex SCHEMA title TEXT WEIGHT 1.0 content TEXT WEIGHT 0.5
这个命令会创建一个名为 myIndex
的索引,包含两个字段:title
和 content
,并为这些字段分配不同的权重。
添加文档
接下来,你可以向索引中添加文档。下面是一个使用 Redis 命令行工具添加文档的示例:
FT.ADD myIndex doc1 1.0 FIELDS title "中文搜索" content "这是一个关于中文搜索的文档"
当然如果出现中文无法查询内容的情况,可以试下
FT.ADD myIndex doc1 1.0 language "chinese" FIELDS title "中文搜索" content "这是一个关于中文搜索的文档"
注意:这里必须要设置语言编码为中文,也就是 language "chinese"
,默认是英文编码,如果不设置则无法支持中文查询
这个命令会向 myIndex
索引中添加一个 ID 为 doc1
的文档,包含 title
和 content
两个字段。
执行搜索
现在,你可以使用 Redisearch 进行搜索了。下面是一个使用 Redis 命令行工具执行搜索的示例:
FT.SEARCH myIndex "中文搜索"
这个命令会返回包含 "中文搜索" 关键词的所有文档。
删除索引的数据
FT.DEL myIndex doc1
我们使用索引加文档 ID 就可以实现删除数据的功能
删除索引
我们可以使用ft.drop
关键字删除整个索引,执行命令如下:
FT.DROP myIndex
查询索引详细信息
我们可以使用ft.info
关键查询索引相关信息
使用 PHP 进行操作
在 PHP 中,你可以使用 phpredis
扩展来操作 Redis 和 Redisearch。下面是一个使用 PHP 进行上述操作的示例:
<?php
// 连接到 Redis 服务器
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 创建索引
$redis->rawCommand('FT.CREATE', 'myIndex', 'SCHEMA', 'title', 'TEXT', 'WEIGHT', 1.0, 'content', 'TEXT', 'WEIGHT', 0.5);
// 添加文档
$redis->rawCommand('FT.ADD', 'myIndex', 'doc1', 1.0, 'FIELDS', 'title', '中文搜索', 'content', '这是一个关于中文搜索的文档');
// 执行搜索
$result = $redis->rawCommand('FT.SEARCH', 'myIndex', '中文搜索');
print_r($result);
这个 PHP 脚本会连接到 Redis 服务器,创建索引,添加文档,并执行搜索。请注意,你需要先安装并启用 phpredis
扩展才能运行此脚本。
与 ElasticSearch 对比
性能对比
为了提供一个清晰的性能对比,下面是一个RedisSearch与Elasticsearch在几个关键性能指标上的比较表格。请注意,这些数据基于特定测试条件下的结果,实际应用中的表现可能会根据具体配置和使用场景有所不同。
指标 | Redisearch | Elasticsearch | 备注 |
---|---|---|---|
索引速度 | 221秒(5.6百万文档) | 349秒(5.6百万文档) | Redisearch快58% |
查询速度 | 12.5K ops/sec | 3.1K ops/sec | Redisearch快4倍 |
查询延迟 | 8毫秒 | 10毫秒 | Redisearch表现更佳 |
内存使用 | 通常更高,因为数据存储在内存中 | 主要存储在磁盘,内存用于缓存和索引 | |
写入性能 | 高效,适用于实时写入和更新 | 适合高并发写入场景 | |
查询性能 | 单机环境下查询速度快 | 通过分片分布查询负载,支持近实时搜索 | |
扩展性 | 受限于内存大小 | 水平可扩展,轻松增加节点处理更多数据 | |
易用性 | 简单,与Redis一致的API | 功能强大但学习曲线陡峭 |
产品对比
特性/工具 | RedisSearch | Elasticsearch |
---|---|---|
数据存储 | 内存中,支持持久化到磁盘 | 磁盘上,基于Lucene索引技术 |
索引类型 | 全文搜索,数值、地理空间等 | 全文搜索,结构化、非结构化数据 |
性能 | 极低延迟,适用于实时查询 | 优秀的分布式搜索性能,适合大规模数据集 |
扩展性 | 支持通过Redis Cluster进行水平扩展 | 强大的集群管理功能,易于水平扩展至PB级数据 |
易用性 | 配置简单,对于熟悉Redis的用户友好 | 功能丰富但设置较为复杂,学习曲线较陡 |
API与语言支持 | REST API, 提供多种客户端库 | RESTful API, 多种编程语言的官方及第三方客户端库 |
查询能力 | 基本的全文检索和过滤 | 复杂的聚合、脚本、过滤器等高级查询 |
社区支持 | 开源社区活跃,作为Redis的一部分得到维护 | 非常活跃的开源社区,有商业版本提供企业级支持 |
典型应用场景 | 实时应用、缓存层、小到中等规模的数据集 | 日志分析、大数据处理、电子商务搜索引擎 |
成本考虑 | 主要是硬件成本(内存),因为它是内存数据库 | 包括硬件(主要是存储)、软件许可费(如果使用X-Pack) |
运维复杂度 | 相对较低,依赖于Redis本身的稳定性和监控工具 | 较高,需要专门的运维团队来管理和优化集群 |
注意
- 在
数据存储
一栏中,RedisSearch主要依赖于Redis的内存存储机制,虽然它也提供了持久化选项,但是默认情况下数据是保存在内存中的。而Elasticsearch则是基于磁盘存储,并利用了Lucene来创建高效的索引。 性能
方面,RedisSearch由于其内存操作的特点,在响应时间上有优势;Elasticsearch则是在大规模分布式环境下表现出色。易用性
方面,RedisSearch对于已经熟悉Redis的人来说更加直观容易上手;而Elasticsearch虽然强大,但是它的配置和使用相对更复杂一些。社区支持
反映了两种工具背后的开发者社区活动程度以及是否有商业支持可供选择。成本考虑
不仅包含了软件本身的成本,还包括了运行这些系统所需的硬件资源的成本。运维复杂度
则指出了日常维护和管理这两种系统的难易程度。
版权声明:本文为原创文章,版权归 全栈开发技术博客 所有。
本文链接:https://www.lvtao.net/database/redisearch.html
转载时须注明出处及本声明