码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-11-23 12:02:49      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:数据类型   mktime   选择   客户   auth   很多   依赖包   log   dex   

        前面我们为大家介绍了 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(fColumn 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 篇

标签:数据类型   mktime   选择   客户   auth   很多   依赖包   log   dex   

原文地址:https://www.cnblogs.com/wekang/p/14000204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!