Azure Blob 文件索引检索查询 -- RedisSearch 篇

摘要:
我们介绍了AzureBlob文件索引检索查询的几个典型场景。本文将介绍RedisSearch的实现。顺便说一下,一则广告被播出了。海外AzureRedisCacheEnterprise版本支持RedisSearch功能。这个版本是RedisLabs发布的Redis商业版,包含了Redis商业版本的许多功能,其中RedisSearch插件支持就是其中之一。RedisSearch完全支持检索和查询功能,包括模糊搜索、全文搜索、丰富的索引数据类型支持以及灵活的查询和检索语法。

        前面我们为大家介绍了 Azure Blob 文件索引检索查询 的几个典型场景,本文为大家来介绍一下 RedisSearch 的方案实现。我们来回顾一下架构图,该方案中选择 RedisSearch 作为索引数据查询引擎作为示例,用户也可以采用相同的架构使用 ElasticSearch 进行搭建。顺便口播一则广告,RedisSearch 功能已经在海外的 Azure Redis Cache Enterprise 版本中支持,该版本为 RedisLabs 发布的 Redis 商业版本,其中包含了很多 Redis 的商业版功能,其中 RedisSearch 插件支持是其中之一。RedisSearch 全面支持检索查询功能,包含模糊搜索,全文检索,丰富的索引数据类型支持,以及灵活的查询检索语法。

Azure Blob 文件索引检索查询 -- RedisSearch 篇第1张

         目前 Redis Cache Enterprise Tier 已经在海外 Azure Preview 预览,用户可以参考链接进行创建, 此处不做赘述。下面我们主要聚焦 RedisSeach 索引数据的创建和管理逻辑

数据准备: 示例中通过本地的书籍信息样本数据为大家进行介绍,原数据是一个 CSV 文件,文件中包含如下书籍信息

Azure Blob 文件索引检索查询 -- RedisSearch 篇第2张

运行环境准备:示例中采用 python 作为示例代码,客户需要环境中安装 redisearch-py 依赖包,并从 Azure Portal 中读取 Redis Cache Enterprise 实例的链接字符串

from redisearch import Client, TextField, NumericField, Query, result
import time
import datetime
import csv

redishost = 'input_your_redis_fqdn_here'
redisport = 10000
redispassword = 'input_your_redis_accesskey_here'
# Creating a client with a given index name
client = Client("searchdemo", host=redishost, port=redisport, password=redispassword)

# Creating the index definition and schema
client.create_index([TextField('author'), TextField('title'), TextField('publisher'), NumericField('publicationdate', sortable=True)], stopwords=[])

数据索引:通过读取 CSV file 中的数据信息,仿真创建 Blob 并将作者,书名,发行商和发行时间作为索引数据。

with open('demobookdataset.csv', mode='r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print(f'Column names are {", ".join(row)}')
            line_count += 1
            continue
        if int(row["publication_date"].split('/')[2]) >= 1970:
            publishdate = time.mktime(datetime.datetime.strptime(row["publication_date"], "%m/%d/%Y").timetuple())
        else:
            epoch = datetime.datetime(1970, 1, 1)
            t = datetime.datetime.strptime(row["publication_date"], "%m/%d/%Y")
            diff = t-epoch
            publishdate = diff.days * 24 * 3600 + diff.seconds
        
        # Indexing a document
        client.add_document(str(line_count), author = row["authors"], title = row["title"], publisher = row["publisher"], publicationdate = publishdate)
        line_count += 1

数据检索查询:示例中通过以索引中 author 作为查询值进行检索查询验证,需要注意在 Filter 的查询语句编写语法上需要按照规范进行编写,可以参考查询语法进行定义。

filter = "create_your_filter_here"
result = client.search(filter)
for item in result.docs:
    print(item)

        RedisSearch 支持丰富的检索查询语法,用户可以灵活的定义查询逻辑,大家可以参考上述的查询语法进行深入的学习来定义自己的场景,这里不做赘述。上述示例通过 Python 代码实现,大家可以按照自己喜好的开发语言进行开发,整个方案关于 EventGrid, Function 的集成这里不再赘述,感兴趣的小伙伴,可以参考我之前的博客Azure NSG Flow Log 引发的自嗨

免责声明:文章转载自《Azure Blob 文件索引检索查询 -- RedisSearch 篇》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇读《Effect Java中文版》WPF中内嵌网页的两种方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

redis跳表简介

转自:https://baijiahao.baidu.com/s?id=1625500811386005937&wfr=spider&for=pc 一、前言 跳表(Skip List)这种数据结构在一般的数据结构书籍和算法书籍里都不怎么涉及----至少我大学数据结构课程没有讲这种结构。但是跳表确实是一种性能比较优秀的动态数据结构,并且Red...

关于mysql的查询优化

由于工作原因,最近甲方客户那边多次反应了他们那边的系统查询速度慢,经过排除之后,发现他们那边的数据库完全没有用到索引,简直坑得一笔,通过慢查询日志分析,为数据表建立了适当的索引之后,查询速度明显的提高上来了,所以这次也总结一下如果进行mysql的优化查询。 1.慢查询 mysql自身是有一个慢查询时间和慢查询记录的,但是在默认情况下,我们的mysql不会记...

MongoDB优化与一些需要注意的细节

这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方。 1. 系统参数及mongo参数设置  mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不选定后续就无法再更改。 directoryperdb主要是将数据库分文件夹存放,方便后续的备份及数据迁移。 storageEngine(存储引擎)默认使...

ES数据架构与关系数据库Mysql

ES数据架构的主要概念(与关系数据库Mysql对比)     MySQL     ElasticSearch Database Index Table Type Row Document Column Field Schema Mapping Index Everything is indexed SQL Query DSL...

阿里巴巴Java编程规范考试

阿里巴巴Java编程规范考试 今天在阿里云官网把阿里巴巴Java编程规范认证考试考过了, 写下这篇文章总结一下考试中需要注意的知识点, 主体内容还是要直接看规范: 编程规约 异常日志 单元测试 安全规约 MySQL数据库 工程结构 编程规约 类名使用UpperCamelCase风格, 但以下情形例外: DO / BO / DTO / VO /...

Oracle SQL语句之常见优化方法总结

1、用EXISTS替换DISTINCT  当SQL包含一对多表查询时,避免在SELECT子句中使用DISTINCT,一般用EXIST替换,EXISTS(低效):   SELECT DISTINCT USER_ID,BILL_ID FROM USER_TAB1 D,USER_TAB2 E  W WHERE D.USER_ID= E.USER_ID; (高效)...