如何全文搜索 Amazon S3 存储桶?
How do you full text search an Amazon S3 bucket?
我在 S3 上有一个存储桶,其中有大量文本文件。
我想在文本文件中搜索一些文本。它仅包含原始数据。
每个文本文件都有不同的名称。
比如我有一个桶名:
abc/myfolder/abac.txt
xyx/myfolder1/axc.txt
& 我想在上面的文本文件中搜索像“我是人类”这样的文本。
如何实现?有可能吗?
唯一的方法是通过 CloudSearch,它可以使用 S3 作为源。它使用快速检索来构建索引。这应该工作得很好,但要彻底检查定价模型,以确保这对您来说不会太贵。
替代方法如杰克所说 - 否则您需要将文件从 S3 传输到 EC2 并在那里构建搜索应用程序。
因为 october 1st, 2015 Amazon offers another search service with Elastic Search, in more or less the same vein as cloud search you can stream data from Amazon S3 buckets.
它将与 lambda 函数一起使用,以确保发送到 S3 存储桶的任何新数据都会触发对此 Lambda 的事件通知并更新 ES 索引。
所有步骤在 amazon doc 以及 Java 和 Java 脚本示例中都有详细说明。
概括地说,设置将数据流式传输到 Amazon ES 需要以下步骤:
- 创建 Amazon S3 存储桶和 Amazon ES 域
- 正在创建 Lambda 部署包。
- 正在配置 Lambda 函数。
- 正在授予将数据流式传输到 Amazon ES 的权限。
您可以使用 Filestash(免责声明:我是作者),安装您自己的实例并连接到您的 S3 存储桶。如果你有大量数据,最后给它一点时间来索引整个东西,你应该很好
如果您有 EMR,请创建一个 spark 应用程序并进行搜索。我们这样做了。这将作为分布式搜索工作
虽然不是 AWS 原生服务,但有 Mixpeek,它在您的 S3 文件上运行 Tika、Tesseract 和 ImageAI 等文本提取,然后将它们放在 Lucene 索引中以使其可搜索。
你整合如下:
-
导入模块和您的 API 密钥:
from mixpeek import Mixpeek, S3
from config import mixpeek_api_key, aws
实例化 S3 class(使用 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
}
]
然后你解析结果
我在 S3 上有一个存储桶,其中有大量文本文件。
我想在文本文件中搜索一些文本。它仅包含原始数据。 每个文本文件都有不同的名称。
比如我有一个桶名:
abc/myfolder/abac.txt
xyx/myfolder1/axc.txt
& 我想在上面的文本文件中搜索像“我是人类”这样的文本。
如何实现?有可能吗?
唯一的方法是通过 CloudSearch,它可以使用 S3 作为源。它使用快速检索来构建索引。这应该工作得很好,但要彻底检查定价模型,以确保这对您来说不会太贵。
替代方法如杰克所说 - 否则您需要将文件从 S3 传输到 EC2 并在那里构建搜索应用程序。
因为 october 1st, 2015 Amazon offers another search service with Elastic Search, in more or less the same vein as cloud search you can stream data from Amazon S3 buckets.
它将与 lambda 函数一起使用,以确保发送到 S3 存储桶的任何新数据都会触发对此 Lambda 的事件通知并更新 ES 索引。
所有步骤在 amazon doc 以及 Java 和 Java 脚本示例中都有详细说明。
概括地说,设置将数据流式传输到 Amazon ES 需要以下步骤:
- 创建 Amazon S3 存储桶和 Amazon ES 域
- 正在创建 Lambda 部署包。
- 正在配置 Lambda 函数。
- 正在授予将数据流式传输到 Amazon ES 的权限。
您可以使用 Filestash(免责声明:我是作者),安装您自己的实例并连接到您的 S3 存储桶。如果你有大量数据,最后给它一点时间来索引整个东西,你应该很好
如果您有 EMR,请创建一个 spark 应用程序并进行搜索。我们这样做了。这将作为分布式搜索工作
虽然不是 AWS 原生服务,但有 Mixpeek,它在您的 S3 文件上运行 Tika、Tesseract 和 ImageAI 等文本提取,然后将它们放在 Lucene 索引中以使其可搜索。
你整合如下:
导入模块和您的 API 密钥:
from mixpeek import Mixpeek, S3 from config import mixpeek_api_key, aws
实例化 S3 class(使用 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 } ]
然后你解析结果