边缘云应用场景_场景实现上云

边缘云应用场景_场景实现上云在地图或地理信息有关的场景里,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中国农业大学”而不是精确到街道的详细

京东云PostgreSQL在GIS场景的应用分享

在地图或地理信息有关的场景里,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中国农业大学”而不是精确到街道的详细地址信息。在地址关键词检索的背后,需要的是一款可以支持全文检索和模糊查询的数据库与之匹配,以此快速提高地址检索的效率。

postgre1.jpg

 PostgreSQL被誉为“世界上可获得的最先进的开源数据库 ”,拥有很强的文本搜索能力,不仅支持全文检索,PostgreSQL还支持模糊查询、正则查询。除此之外,PostgreSQL还内置了表达式索引、Gin索引功能,配合丰富的插件生态,在地址关键词检索方向有比较大的优势。

 本文介绍了一种基于PostgreSQL物流地址关键词检索的方法,以此来说明如何用PostgreSQL提升物流地址关键词的检索效率。

一、应用背景

在需要地址检索的场景中,用户输入地址文本后需要对地址进行分词,然后通过全文索引技术与地址语料数据库进行匹配,得到规范化的地址信息,并在此基础上进行地址定位。通常地址查询语句在经过地址分词处理后会被分割成几段关键词,通过关键词匹配到历史地址语料数据库,再返回查询语句得到查询结果。

通常从用户输入关键词查询到得到返回结果由于关键词分词和匹配方法不同,会耗时几秒到几十秒不等。

检索数据库中的条目是很基本常见的功能,实现的方法也很多,常见包括:

1、基于Elasticsearch 或 Lucene这类专业独立的检索引擎实现

2、基于数据库自带的检索功能实现

虽然基于Elasticsearch这类系统能实现比较灵活的检索功能,但开发和运维成本也将大大增加,如何利用PostgresSQL内置的功能快速高效的实现大多数中文检索场景是我们要讨论的技术方案。

 二、技术方案

GIN(Generalized Inverted Index, 通用倒排索引) 是一个存储对(key, posting list)集合的索引结构,其中key是一个键值,而posting list 是一组出现过key的位置。如(“hello”, “14:2 23:4”)中,表示hello在14:2和23:4这两个位置出现过,在PostgreSQL中这些位置实际上就是元组的tid。表中的每一个属性在建立索引时,都可能会被解析为多个键值,所以同一个元组的tid可能会出现在多个key的posting list中。通过这种索引结构可以快速的查找到包含指定关键字的元组。

pg_trgm是PostgreSQL基于N-gram模型分词的扩展插件,它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列,pg_trgm就是三元的3-Gram,每连续的3个字符为一个TOKEN,然后在对TOKEN建立GIN倒排索引,就可以进行高效、精准的模糊查询。

pgbigm与pg_trgm类似,也是PostgreSQL基于N-gram模型分词的扩展插件,区别在于pgbigm是二元的2-Gram。

结合PostgreSQL 索引和分词模型的特点,我们构建了1亿行左右的北京区域的本文地址数据进行性能测试,对比分析PostgreSQL在物流关键词检索的场景里有明显效率的提升,测试结果如下:

 postgre2.jpg

从以上结果可以看出,无论是pg_trgm+gin还是pgbigm+gin性能比常用的Btree在进行模糊查询的时候,性能要好很多。同时,因为pg_trgm生成的TOKEN是三个字符,只有在三个字符以上条件,才能匹配到对应的TOKEN,当小于3个字符,需要前后模糊搜索1个或者2个字符,所以检索性能下降比较明显,相比来说pgbigm(基于二元的Tri-Gram)在处理单字、双字字符的模糊查询效率都比较高。由于物流的关键字都是三个字符以上,所以采用的是pg_trgm+gin的方案进行关键词检索查询,从而保证毫秒级别的响应时间。

另外对于文本地址数据,往往都具备自然语言的特性,jieba结巴分词是一个强大的分词库,分词更加贴合业务属性特点,主要功能包含:支持不同模式的分词、自定义字典、关键字提取、词性标注。pg_jieba运用了jieba分词算法,构建了PostgreSQL中文分词插件,分词效果也有不错的表现。

 三、总结

综上,PostgreSQL支持丰富的索引,具备强大的全文检索能力以及多样的插件生态,支持不同场景下的文本查询,用户完全不需要将数据同步到搜索引擎,再来查询,使用PostgreSQL可以大幅度的简化用户的架构,开发成本,同时保证数据查询的绝对实时性。

京东云基于开源的 PostgreSQL构建的一款功能强大的关系型数据库云数据库 PostgreSQL ,支持丰富的数据类型及地理信息扩展,具有强大的并行计算能力。支持备份、监控、迁移等全套解决方案。

作者:曲艺伟/彭智

原文地址:https://www.cnblogs.com/Jcloud/archive/2022/08/30/16638129.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4837.html

(0)
上一篇 2023-06-02
下一篇 2023-06-03

相关推荐

  • 用Python计算0的正弦值

    用Python计算0的正弦值正弦是一个三角函数,指一个角的对边与斜边的比值。在Python中,我们可以使用math库中的sin函数来计算正弦值。

    2024-03-29
    74
  • Python Read Lines:从文件中读取多行文本

    Python Read Lines:从文件中读取多行文本Python Read Lines是从文件中读取多行文本的基础操作之一,十分常用。在每个Python项目的不同阶段,我们都需要从多个文件中读取文本,将其处理并展示出来。Python Read Lines是这种情况下最实用的方式之一,它允许我们快速有效地访问文件中的多行文本。

    2024-02-21
    94
  • 禧云数芯大数据平台技术白皮书「建议收藏」

    禧云数芯大数据平台技术白皮书「建议收藏」白皮书首次完整介绍了我司数据中台的数据资产管理、数据开放共享、开发协作调度、数据采集与迁移管理、数据可视化及自助分析、平台运维管控六大技术领域,并从抽象出来的平台支撑、数据管理和数据产品三大体系逐一拆

    2022-12-30
    135
  • 【StoneDB】产品FAQ

    【StoneDB】产品FAQStoneDB与MySQL的兼容性如何? StoneDB高度兼容MySQL 5.6、5.7协议和MySQL生态等重要特性,支持MySQL常用的功能及语法。 由于StoneDB本身的一些特性,部分操作和

    2023-06-01
    158
  • sql递归查询父子节点「终于解决」

    sql递归查询父子节点「终于解决」一、表结构 二、递归查询当前节点的所有父节点 select * from test start with id = 3 connect by prior pid = id 三、递归查询当前节点的所有…

    2023-03-05
    159
  • 给小白的 PG 容器化部署教程(下)[亲测有效]

    给小白的 PG 容器化部署教程(下)[亲测有效]作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上下两部分,《第一部

    2023-05-20
    158
  • 你python基础怎么样(Python好吗)

    你python基础怎么样(Python好吗)1、有较强的逻辑思维能力

    2023-11-27
    119
  • 文献搜索算法[亲测有效]

    文献搜索算法[亲测有效]搜索算法是利用计算机的强大计算能力来有目的的穷举一个问题的解空间的部分或所有的可能情况,从而求出问题的解的一种方法。在具体的实现中往往是一段计算机代码,用来在大型的数据库中查找具有特定属性的项目。 …

    2023-01-31
    145

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注