简单地说,我们现在是Redis

了解更多

构建医疗保健提供者Finder

对患者来说,在医疗保健领域导航可能会令人困惑。术语和选项通常是不熟悉的,甚至很难弄清楚如何开始。“商店查找器”功能通常在零售站点上找到,它可以帮助您根据邮政编码找到附近的医生或其他医疗保健提供商。

不幸的是,这种功能并不总是易于创建的。我们生活在一个球体上,如果我们想在任何方向上找到给定距离内的位置,我们必须将圆圈投影到球体上,并使用并不完全直截了当的坐标系。所有这些都相当于不如此简单的数学。谢天谢地,redis拥有各种各样的地理空间能力,可以帮助您构建此类功能。

我们在这个问题中回答的最基本问题非常简单:“靠近我的医疗保健提供者?”为此,您需要医疗保健提供商列表,提供者的纬度和经度,以及患者询问问题的位置。提供者列表可以看出这样的东西:

这是一个用于演示目的的小名单,但在Redis中,此列表可能非常庞大,仅限于可用的内存量。

找到患者的位置可以做出多种方式:反向IP,邮政编码匹配(称为aGeocoder),甚至是设备GPS。每个方法都具有超出本帖子范围的优点,缺点和具体的实施细节。然而,无论该方法如何,它们都反向到纬度和经度。我们现在只承担53.5469,-113.4977的位置。

将数据导入Redis可以是一次性的事情,也可以随着提供商列表的变化而定期更新。的GEOADD命令将一个位置添加到所谓的geoset.GeoSets是将经度和纬度的分类集的变种,该集合到Geohash中存储在排序的集合成员的分数中。让我们看看看起来像什么:

> Geoadd提供商-113.4967 53.5574 Royal-Alex
(整数)1
> GEOADD providers -113.5313 53.5177 cross-cancer institute
(整数)1
> Geoadd提供商-113.4283 53.4608 Gray-Nuns-Community医院
(整数)1
> Geoadd提供商-113.5247 53.5205大学 - 阿尔伯塔医院
(整数)1
> GEOADD供应商-113.6119 53.5207米索菌社区医院
(整数)1

在此示例中的说明是参数。第一个参数是密钥,如Redis的典型版本。第二个论点是经度,第三个是纬度,最后最后一个参数是成员。(这是超级重要的值得注意的是,经度和纬度的顺序从你可能习惯看到的东西逆转。)

现在我们有了我们的数据在系统中,每当用户想要找到一个供应商,我们只需要运行一个单一的Redis命令来找到他们附近的位置:

> Georadius提供商-113.4977 53.5469 53公里

第一个参数是前面的键,第二个和第三个参数分别是用户的经度和纬度。第四个和第五个参数是距离和单位(km.公里,MI.几英里,f脚,米)。输出看起来像这样:

1)“royal-alex”
2)“艾伯塔大学医院”
3)“跨癌研究所”

地理空间与其他功能

上面的示例将使患者能够找到最近的医疗机构,但如果他们想要去提供特定服务的提供商,该怎么办呢?如果他们需要提供一种以上专业的设施怎么办?Redis也可以在这方面提供帮助。

而不是使用GEO系列命令,我们将使用重新设计模块。Redisearch对查询数据具有更丰富的功能,但保留了Geo系列命令的地理空间功能。但是,这些更丰富的功能要求我们首先创建架构。

> FT.CREATE ft_providers SCHEMA name TEXT services标签位置

这会创建一个名为ft_providers.有三个字段:的名字服务, 和位置的名字是一个文本字段,所以它可以持有人类语言;服务是一个标签字段,它包含代表所提供的服务的标签;最后位置拥有该位置的纬度和经度。

现在,让我们将位置添加到索引中。我们将使用ft.add.命令,该命令要求索引后跟文档ID以惟一地标识文档,然后是文档得分。在这之后,模式保留字以文档的字段划分选项,遵循字段名称,值订单。让我们来看看:

> FT.ADD FT_PROVIDERS Royal-Alex 1.0字段名称“Royal Alex医院”服务“肾冬透明蛋白,英雄克伦,胃镜检查,老年化学,强化,塑料,超声”位置“-113.4967 53.5574”OK> FT.DD FT_Providers跨癌症学院的跨癌学院1.0字段名称“交叉癌研究所”服务“超声,透视,MRI,乳房摄影,物理学,Tomourtriage”位置“-113.5313 53.5177”OK> FT.DD FT_Providers Gray-Nuns-Community-Hospital 1.0田间名称“Gray Nuns Community Hospional”服务“呼吸系统治疗,骨科,核心秘密,Labouranddelivery,荧光透视,强化”位置“-113.4283 53.4608”OK> FT.DD FT_Providers大学alberta医院1.0博物馆名称“Alberta医院大学”服务“Colonoscopy,ContensiveCare,Nucelarmedicine,呼吸疗程,胃镜检查“位置”-113.5247 53.5205“OK> FT.DD FT_Providers Misericordia-Community医院1.0博物馆名称”Misericordia社区医院“服务”骨科,老年教学,英尺,超级幻跳,Labouranddelivery“位置”-113.6119 53.5207“好的


一旦我们在Redisearch中拥有数据,我们就可以开始搜索设施。在Redisearch中,我们使用一个名为的命令FT.Search..第一个参数是搜索的索引,第二个参数是查询.在RediSearch中,您指定一个查询,该查询将确定返回给您的结果。查询可以非常简单,也可以非常复杂,但是,与其他数据库不同的是,查询从不做任何管理或破坏性的事情。

假设您想要在上面使用的样本位置附近找到供应商,但只能找到提供超声波服务的供应商。在reresearchch中,查询看起来像这样:

> FT.SEARCH ft_providers "@location:[-113.4967 53.5574 5 km] @services:{超声}" 1)(整数)2 2)“cross-cancer-institute”3)1)“名称”2)“跨癌研究所”3)“位置”4)“-113.5313 - 53.5177 5)“服务”6)“超声,透视,核磁共振,乳房x光检查,physicaltherapy, tumourtriage”4)“royal-alex”5)1)“名称”2) "Royal Alex Hospital" 3) "location" 4) "-113.4967 53.5574" 5) "services" 6) "kidneyclinic,footclinic,gastroscopy,geriatrics,intensivecare,plasticsurgery,ultrasound"


reresearch中的符号表示“在特定领域进行搜索”。查询的第一部分是一个地理空间字段的搜索子句位置.你会注意到方括号之间的参数和GEORADIUS命令:经度后跟纬度,然后是搜索半径和单位。第二符号后跟字段名称服务,这意味着我们正在搜索每个文档的服务字段。括在花括号中是现场所需的标签的名称。在这种情况下,我们正在寻找包含标记的文档超声.在位置和服务搜索子句之间有一个空格——在reresearchch中,这是一个隐含的and。

在构建UI时,您可以将各种用户输入撰写到同一查询中以改进结果。这是一个粗略的草图,粗略地是如何工作的:

从应用程序的角度来看,UI元素是字符串的一种表示,当它们更改时,将它们模板化为要传递的字符串FT.Search..在SQL查询中插入字符串是有风险的鲍比表)由于SQL语言中的管理操作。相比之下,Redisearch查询只能找到文档而不执行管理操作,因此只需要简单的输入验证和Sanity检查。

如果用户同时检查了两者,就会增加搜索的复杂性超声老年病学,你会改变服务条款通过插入管道(|在两个标签之间,如下所示:

> ft.search ft_providers“@location:[ -  113.4967 53.5574 53.5574 5km] @services:{超声波|老年人}”1)(整数)2 2)“皇家亚历克斯”3)1)“名字”2)“皇家亚历克斯医院“3)”位置“4)”-113.4967 53.5574“5)”服务“6)”肾蛋白,海燕,胃镜检查,老年教学,强化,塑料,超声“4)”跨癌研究所“5)1)”名称“2)”跨癌学院“3)”位置“4)”-113.5313 53.5177“5)”服务“6)”超声波,透视,MRI,乳房X线切摄影,乳房摄影,Tumourtrige“


RediSearch非常灵活,几乎可以处理您在这种类型的应用程序中需要的任何其他特性。名称和名称前缀搜索、类似于声音的名称和街道名称等操作都只是这种类型查询的增量步骤。例如,您可以添加一个很酷的等待时间特性包括一个数字字段的schema-because RediSearch实时搜索引擎,可以迅速更新这个值,所以患者试图找到提供者最短等待时间总是get-up-to-date结果。

Redis可以帮助您使用几行代码构建简单的保健提供商查找器,并且重新搜索几乎可以填写您可能需要的任何功能,因此患者可以找到满足他们需求的提供者。因为Redis和Redisearch具有内置的地理空间功能,因此您无需执行任何数学。Redisearch为您提供了丰富的查询能力,可以安全地接受患者的输入,并且能够实时更新,这意味着您可以对患者提供超出日期信息进行更改。

Baidu