简单地说,我们现在是Redis
RediSearch 2.0现在公开预览了!这个主要的新版本中的大部分特性都是由您的反馈驱动的,重点是改进开发人员体验和增强可伸缩性。但这篇博文主要是帮助您开始使用RediSearch 2.0的新数据索引功能,以及创建索引的更好方法。
拥有一个丰富的查询和聚合引擎在你的Redis数据库中打开了许多新的应用程序的大门,远远超过缓存。你可以使用Redis作为你的主要数据库,甚至当你需要使用复杂的查询访问数据,而不增加代码的复杂性,以更新和索引数据。这一切都得益于Redis著名的速度、可靠性和可扩展性!
想了解更多的新信息,请看引入RediSearch 2.0
先决条件
要开始使用RediSearch 2.0,您需要:
获得一个启用了RediSearch的Redis数据库
你可以通过多种方式安装和使用reresearch2.0:
为简单起见,本文将使用Docker图像。(如果已经安装了RedisSearch 2.0,可以跳到下一节。)要使用Docker启动Redis实例,请打开终端并运行以下命令:
> docker run -it——rm——name redissearch -2 \ -p 6379:6379 \ redis/ redisresearch:2.0.0
注意:容器退出时将自动删除(-rm参数)。
使用您最喜欢的Redis客户端,连接到reresearch数据库。
如果你已经用Docker启动了你的Redis实例,你可以使用下面的命令来使用redis-cli嵌入容器中:
> docker执行它redis-search-2 redis-cli
如果你想使用Redis Insight,添加您的reresearchch实例去医院CLI.
插入数据
现在可以插入一些数据了。这个例子使用的电影数据存储为Redis哈希,所以让我们插入几个电影:
> HSET电影:11002标题“星球大战:V -《帝国反击战》“阴谋”卢克·天行者与尤达开始绝地训练。“release_year 1980流派”行动”评级8.7票1127635(整数)6 > HSET电影:11003年“教父“阴谋”的老族长有组织犯罪王朝转移控制的帝国的儿子。9.2“release_year 1972流派“戏剧”评级投票1563839(整数)6
数据库现在包含两个哈希值。如果您知道电影的密钥,那么使用以下命令检索信息是很简单的(电影:11002):
> HMGET电影:11002标题评级1)《星球大战5:帝国反击战》“8.7”
但是如何查询数据库以获得一个基于使用标题,类型,或者是发布年份?
对于“核心”Redis数据结构,你必须使用set来管理你自己的索引,将类型与电影id列表相关联,例如,并添加大量代码到你的应用程序来管理和查询索引。
但是使用RedSearch,您可以简单地定义与数据关联的索引,并让数据库管理它们。然后,您可以使用查询引擎使用辅助索引查询/搜索数据。
若要创建索引,必须定义一个架构,以列出索引的字段及其类型,以及可以在查询中使用的字段及其类型。
在这个例子中,你将索引四个字段:
方法创建索引FT.CREATE命令:
> FT.CREATE idx:movie ON hash PREFIX 1 "movie:" SCHEMA title TEXT SORTABLE release_year NUMERIC SORTABLE rating NUMERIC SORTABLE genre TAG SORTABLE OK
不过,在运行查询之前,让我们仔细看看FT.CREATE命令:
RediSearch 2.0引擎将使用PREFIX值扫描数据库,并基于模式定义更新索引。这使它易于向现有应用程序添加索引如果使用哈希,则不需要更改代码。
您可以使用以下命令查看索引信息:
> FT.INFO idx:movie 1) index_name 2) idx:movie…46) 1) global_idle 2) (integer) 0…
现在我们准备使用索引和查询数据库。
对于本节,您将使用FT.SEARCH命令及其语法;请注意,这篇博文的目的是让你开始,所以我们只关注基本内容,不涉及所有细节。要了解更多关于reresearch的信息,请看文档和教程.
全文搜索查询
RediSearch是一个全文搜索引擎,允许应用程序运行强大的查询à la谷歌。例如,要搜索包含“战争,则执行如下命令:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating 1) (integer) 1 2)“电影:11002”3)1)“标题”2)《星球大战5:帝国反击战》“release_year”4)“1980”5)“评级”6)“8.7”
如你所见,这部电影《星球大战5:帝国反击战,即使你只使用了“战争“匹配”战争的标题。这是因为标题已经被索引为文本,所以字段是标记化的和是.
此外,该命令没有指定字段,因此单词“war”(及相关词语)在索引的所有文本字段中搜索。如果想搜索特定的字段,可以使用@场注释如下:
> FT.SEARCH idx:电影“@标题:战争”返回3标题发布年评级
您可以对这个简单的数据集运行额外的全文搜索查询,如下所示(注意:为了保持文档简短,查询的结果不显示):
前缀匹配:
> FT.SEARCH idx:电影“emp*”返回3标题发布年评级
模糊搜索:
> FT.SEARCH idx:movie "%gdfather%" RETURN 3 title release e_year rating
工会:
> FT.SEARCH idx:电影“战争| %gdfather%”返回3标题发布年评级
你可以找到更多关于reresearch文档中的查询语法.
标记字段搜索
使用标签字段“genre”找到所有“drama”电影:
> FT.SEARCH idx:movie "@genre:{Drama}" RETURN 3 title release_year rating 1) (integer) 1 2)“电影:11003”3)1)“标题”2)《教父》3)“release_year”4)“1972”5)“评级”6)“9.2”
的语法@field: {value}指示您正在标记字段中搜索。你可以找到更多关于reresearch文档中的标记过滤器.
到目前为止,您要查询的所有数据都是在创建索引之前创建的,并在创建索引期间建立索引。让我们来改变一下,添加一个新电影:
> HSET“电影:11005”标题“星球大战:Episode VI - Jedi的回归”情节“the Rebels destroy the Empire’s Death Star.”发布时间:1983类型“Action”评分:8.3票906260(整数
你可以重用之前的查询:
> FT.SEARCH idx:movie "war" RETURN 3 title release_year rating 1) (integer) 2“电影:11005”3)1)“标题”2)《星球大战6:绝地归来》“release_year”4)“1983”5)“评级”6)“8.3”4)“电影:11002年“5)1)“标题”2) "Star Wars: Episode V - The Empire Strikes Back" 3) "release_year" 4) "1980" 5) "rating" 6) "8.7"
如您所见,新影片已被自动编入索引。
类似地,如果你删除了一个电影或者电影过期了,索引会自动更新,如下所示:
> EXPIRE "movie:11002" 15(整数)1
如果您等待15秒并运行搜索查询,您将看到该影片已从索引中删除。
当您希望执行临时搜索并让数据库管理数据和索引的过期时间时,这是非常强大的。你可以在我们的博客文章中找到更多关于临时搜索的信息短暂搜索的案例.
这篇文章分享了RediSearch的一些基础知识,并展示了如何从应用程序代码中透明地索引数据。这个功能是RediSearch 2.0中的新功能,从RediSearch 1开始。X开ag万博下载万博最新版本下载苹果发人员必须专门使用FT.ADD命令对数据进行索引。
除了这篇博文中讨论的搜索和索引功能,RediSearch还具有强大的功能数据聚合reresearch文档中介绍的功能,教程,及在线课程.
的教程包含相同的数据,但使用更大的数据集和更多的示例查询和聚合。它还包含一个应用程序,展示了如何将reresearch与Java、Python和Node.js等编程语言一起使用。要了解更多信息,请查看这些额外的资源: