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

Posted wekang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Azure Blob 文件索引检索查询 -- RedisSearch 篇相关的知识,希望对你有一定的参考价值。

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

 

 

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

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

 

运行环境准备:示例中采用 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 篇的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 c# 从 azure blob 存储中检索 xml 文件

推送文档(blob)以进行索引 - Azure 搜索

使用 SAS 将文件从 Azure Blob 存储下载到浏览器

当用于 Blob 存储的 Azure REST API 使用具有前缀或标记的查询字符串时获取 403

我是不是必须将 Azure Blob 存储中的 PDF 文件存储到 OCR 并为其编制索引?

索引 Azure 存储上的加密 Blob