您如何全文搜索 Amazon S3 存储桶?
Posted
技术标签:
【中文标题】您如何全文搜索 Amazon S3 存储桶?【英文标题】:How do you full text search an Amazon S3 bucket? 【发布时间】:2015-04-17 22:12:55 【问题描述】:我在 S3 上有一个存储桶,其中有大量文本文件。
我想在文本文件中搜索一些文本。它仅包含原始数据。 每个文本文件都有不同的名称。
例如,我有一个存储桶名称:
abc/myfolder/abac.txt
xyx/myfolder1/axc.txt
&我想在上述文本文件中搜索“我是人类”之类的文字。
如何做到这一点?有没有可能?
【问题讨论】:
您必须一一请求所有文件;毕竟它不是一个关系数据库。 如果我有 10 个缺少文件。那么我的搜索会很慢吗? 是的,搜索一百万个文件需要一些时间;最好重新考虑您的选择。 AWS提供的云搜索Api呢? 【参考方案1】:执行此操作的唯一方法是通过CloudSearch,它可以使用 S3 作为源。它使用快速检索来构建索引。这应该很好用,但要彻底检查定价模型,以确保这对您来说不会太贵。
正如 Jack 所说,另一种方法是 - 您需要将文件从 S3 传输到 EC2 并在那里构建搜索应用程序。
【讨论】:
【参考方案2】:由于october 1st, 2015 Amazon 提供了另一种使用 Elastic Search 的搜索服务,与云搜索大致相同,您可以使用 stream data from Amazon S3 buckets。
它将与 lambda 函数一起使用,以确保发送到 S3 存储桶的任何新数据都会触发对此 Lambda 的事件通知并更新 ES 索引。
amazon doc 中的所有步骤都非常详细,带有 Java 和 javascript 示例。
概括地说,设置将数据流式传输到 Amazon ES 需要以下步骤:
创建 Amazon S3 存储桶和 Amazon ES 域 创建 Lambda 部署包。 配置 Lambda 函数。 授予将数据流式传输到 Amazon ES 的授权。【讨论】:
【参考方案3】:虽然不是 AWS 原生服务,但有 Mixpeek,它在您的 S3 文件上运行 Tika、Tesseract 和 ImageAI 等文本提取,然后将它们放入 Lucene 索引中以使其可搜索。
你按如下方式整合它:
下载模块:https://github.com/mixpeek/mixpeek-python
导入模块和您的 API 密钥:
from mixpeek import Mixpeek, S3
from config import mixpeek_api_key, aws
实例化 S3 类(使用 boto3 和请求):
s3 = S3(
aws_access_key_id=aws['aws_access_key_id'],
aws_secret_access_key=aws['aws_secret_access_key'],
region_name='us-east-2',
mixpeek_api_key=mixpeek_api_key
)
上传一个或多个现有的 S3 文件:
# upload all S3 files in bucket "demo"
s3.upload_all(bucket_name="demo")
# upload one single file called "prescription.pdf" in bucket "demo"
s3.upload_one(s3_file_name="prescription.pdf", bucket_name="demo")
现在只需使用 Mixpeek 模块进行搜索:
# mixpeek api direct
mix = Mixpeek(
api_key=mixpeek_api_key
)
# search
result = mix.search(query="Heartgard")
print(result)
结果可以是:
[
"_id": "REDACTED",
"api_key": "REDACTED",
"highlights": [
"path": "document_str",
"score": 0.8759502172470093,
"texts": [
"type": "text",
"value": "Vetco Prescription\nVetcoClinics.com\n\nCustomer:\n\nAddress: Canine\n\nPhone: Australian Shepherd\n\nDate of Service: 2 Years 8 Months\n\nPrescription\nExpiration Date:\n\nWeight: 41.75\n\nSex: Female\n\n℞ "
,
"type": "hit",
"value": "Heartgard"
,
"type": "text",
"value": " Plus Green 26-50 lbs (Ivermectin 135 mcg/Pyrantel 114 mg)\n\nInstructions: Give one chewable tablet by mouth once monthly for protection against heartworms, and the treatment and\ncontrol of roundworms, and hookworms. "
]
],
"metadata":
"date_inserted": "2021-10-07 03:19:23.632000",
"filename": "prescription.pdf"
,
"score": 0.13313256204128265
]
然后你解析结果
【讨论】:
【参考方案4】:您可以使用Filestash(免责声明:我是作者),安装您自己的实例并连接到您的 S3 存储桶。如果你有大量数据,最终给它一点时间来索引整个事情,你应该很好
【讨论】:
Filestash 是否也搜索 .gz 文件?【参考方案5】:如果您有 EMR,则创建一个 spark 应用程序并进行搜索。我们这样做了。这将用作分布式搜索
【讨论】:
以上是关于您如何全文搜索 Amazon S3 存储桶?的主要内容,如果未能解决你的问题,请参考以下文章
如何授予 Amazon SES 写入您的 Amazon S3 存储桶的权限
Amazon S3 存储桶策略:如何锁定仅访问您的 EC2 实例