我们可以使用API在AWS Cloud Search上上传文件(文本,pdf等)吗?我阅读了它的文档,但我没有得到任何参考
http://docs.amazonwebservices.com/cloudsearch/latest/developerguide/SvcIntro.html?r=130.
或者我是否必须创建包含文档中提取的文本的SDF.
我刚刚开始使用boto连接到Amazon CloudSearch.
我让这些示例正常工作,但我找不到任何连接到现有域的示例,所有示例都创建了一个新域.
我四处寻找get_domain,但如果我在连接对象上调用它,那就失败了.
>>> conn.get_domain('foo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Layer2' object has no attribute 'get_domain'
Run Code Online (Sandbox Code Playgroud)
有关如何连接到现有域的任何建议?
[编辑]我从这开始:http://boto.cloudhackers.com/en/latest/cloudsearch_tut.html
所以,我正在这样做
import boto
conn = boto.connect_cloudsearch()
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个域并上传一个示例数据,如:
[
{
"type": "add",
"id": "1371964",
"version": 1,
"lang": "eng",
"fields": {
"id": "1371964",
"uid": "1200983280",
"time": "2013-12-23 13:00:26",
"orderid": "1200983280",
"callerid": "66580662",
"is_called": "1",
"is_synced": "1",
"is_sent": "1",
"allcaller": [
{
"sno": "1085770",
"uid": "1387783883.30547",
"lastfun": null,
"callduration": "00:00:46",
"request_id": "1371964"
}
]
}
}]
Run Code Online (Sandbox Code Playgroud)
当我在创建域时上传示例数据时,cloudsearch没有采用它.如果我删除allcaller数组,那么它将顺利进行.
如果cloudsearch不允许对象数组,那么我应该如何格式化这个json?
我正在当前的 CloudSeach 集成中添加按名称搜索选项。我正在name通过传递phrase field=name 'Stratosphere Hotel, Casino'for 来搜索密钥filter_query。如果我有一个精确的名称匹配,这工作正常。但是我的搜索输入name来自谷歌地图 API,我的 CloudSeach 中的数据可能与name键中的值不完全匹配。
IE。
search input: DoubleTree by Hilton Hotel Irvine - Spectrum
CloudSeach value: DoubleTree by Hilton Irvine - Spectrum
search input: Candlewood Suites OC Airport- Irvine West Extended Stay Hotel
CloudSeach value: Candlewood Suites OC Airport-Irvine West
Run Code Online (Sandbox Code Playgroud)
我已经研究过near, fuzzy logic码头,但我对 CloudSeach 还很陌生。
https://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-text.html https://docs.aws.amazon.com/cloudsearch/latest/developerguide/filtering-results.html
有没有办法进行部分单词搜索并匹配它并返回这些数据。顺便说一句,80% 的数据与 CloudSeach 上传的数据匹配名称,只有大约 20% 的数据我在搜索时遇到了问题。
我正在尝试使用以下批处理文档删除AWS CloudSearch中的单个文档:
[{
"type": "delete",
"id": "532177"
}]
Run Code Online (Sandbox Code Playgroud)
但我从AWS收到以下错误:

并在下载SDF时返回以下内容:
[
{
type: "add",
id: "delete_img_json",
version: 1406072053,
lang: "en",
fields: {
content: "[{ "type": "delete", "id": "532177" }]",
resourcename: "Delete_IMG.json",
content_encoding: "ISO-8859-2",
content_type: "application/json"
}
}
]
Run Code Online (Sandbox Code Playgroud)
我试图做的就是从我的CloudSearch索引中删除单个文档.
使用字段的确切内容作为查询查询 Amazon Cloudsearch 时,如果查询(和内容)包含停用词,Cloudsearch 不会返回任何结果。如果我从查询中删除停用词,则返回结果。
我知道在索引性能时会从内容中删除停用词,但我认为它们也会在查询中被忽略以防止这种行为。
为了让冗长的用户获得预期的结果,我是否需要从每种语言的查询中过滤掉停用词,或者 Cloudsearch 是否有办法忽略查询本身中的停用词?
索引字段内容:
The Company Search Test
Run Code Online (Sandbox Code Playgroud)
示例查询
使用停用词:
Query: the company search test
Results: NONE
Run Code Online (Sandbox Code Playgroud)
没有停用词:
Query: company search test
Results: YES
Run Code Online (Sandbox Code Playgroud)
内引:
Query: "the company search test"
Results: YES
Run Code Online (Sandbox Code Playgroud)
此示例的实现细节:
我正在从node.js中的Lambda函数在我的AWS CloudSearch域上执行搜索:
我上传了一个这样的文件:
{
“some_field”: “bla bla“,
“some_date_field”: 1.466719E9,
"number_field”: 4,
“some_string”: "some long string blabla"
}
Run Code Online (Sandbox Code Playgroud)
我执行这样的搜索
var params = {
query: 'bla bla',
};
cloudsearchdomain.search(params, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
context.fail(err);
}
else {
context.succeed(data); // successful response
}
});
Run Code Online (Sandbox Code Playgroud)
搜索工作正如此处所述, CloudSearch 在匹配的字段属性中返回文档信息.这是一个例子:
{
"status": {
"timems": 2,
"rid": “blabla”
},
"hits": {
"found": 1,
"start": 0,
"hit": [
{
"id": “452545-49B4-45C3-B94F-43524542352-454352435.6666-8532-4099-xxxx-1",
"fields": {
“some_field”: [
“bla bla“
], …Run Code Online (Sandbox Code Playgroud) 我正在尝试开始使用 Amazon CloudSearch。我的数据位于我想要搜索的 DynamoDB 表中。我能够设置云搜索域,它从表中提取字段并让我设置它们,等等。但是,我上传数据时遇到了一些问题。我告诉它要从中提取 DynamoDB 表,它会提取数据并告诉我它找到了这些项目,我按下了导入按钮,但它给了我关于需要至少一个字段并且需要有一个非空 id 的错误。
我下载了它试图上传的文档列表,并且我看到这个(或类似的)在整个文档中经常重复:
{
"type": "add",
"id": "null",
"fields": {
}
},
{
"type": "add",
"id": "null",
"fields": {
"libraries": "721409e7-5fca-495d-a625-a5bc5f4a0434~d8ccd611-ae75-418b-91a3-13dd57d46934",
"shadecolor": "170-98-104",
"objecttype": "20",
"timestamp": "2017-01-25T22:43:53.672Z"
}
},
Run Code Online (Sandbox Code Playgroud)
显然,我可以看到其中一个文档的 id 为空,根本没有字段,而另一个文档有字段但没有 id,这似乎是问题所在。但是我不知道这些数据来自哪里以及为什么生成它。该 ID 是我的 DynamoDB 哈希键,因此它不能为空,否则 Dynamo 不会接受它。我查看了我的 Dynamo 数据,但找不到任何类似的数据......
有人可以告诉我这里可能发生了什么以及处理它以将我的数据导入 CloudSearch 的最佳方法吗?
我在将存储库注册到 aws 弹性搜索时遇到问题。这是我用来执行此操作的链接:
正如链接中提到的,我复制了以下代码并运行它:
from boto.connection import AWSAuthConnection
Run Code Online (Sandbox Code Playgroud)
类 ESConnection(AWSAuthConnection):
def __init__(self, region, **kwargs):
super(ESConnection, self).__init__(**kwargs)
self._set_auth_region_name(region)
self._set_auth_service_name("es")
def _required_auth_capability(self):
return ['hmac-v4']
if __name__ == "__main__":
client = ESConnection(
region='us-east-1',
host='search-weblogs-etrt4mbbu254nsfupy6oiytuz4.us-east-1.es.example.com',
aws_access_key_id='my-access-key-id',
aws_secret_access_key='my-access-key', is_secure=False)
print 'Registering Snapshot Repository'
resp = client.make_request(method='POST',
path='/_snapshot/weblogs-index-backups',
data='{"type": "s3","settings": { "bucket": "es-index-backups","region": "us-east-1","role_arn": "arn:aws:iam::123456789012:role/TheServiceRole"}}')
body = resp.read()
print body
Run Code Online (Sandbox Code Playgroud)
我还调整了安全性和帐户 ID 以及……以适应我的情况。当我运行它时,我收到以下错误:
b'{"Message":"Cross-account pass role is not allowed."}'
Run Code Online (Sandbox Code Playgroud)
无论我使用什么都在同一个帐户中,我还向我的用户添加了以下内联策略
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::xxxxxxxxxx:role/myrole"
}
Run Code Online (Sandbox Code Playgroud)
}
任何人都可以帮助我的问题是什么?
我目前正在评估是否可以使用 Amazon CloudSearch 而不是 Elastic Search 来满足我们的搜索需求。现在,我只有大约 4K 的小文档用于测试目的。每当我要求它重新索引时(假设将实例类型从默认更改为 m3.2xlarge 后),需要很长时间(大约 50-60 分钟)才能从处理状态进入活动状态。这是预期的行为吗?有什么改进的建议吗?
amazon-ec2 ×1
amazon-iam ×1
amazon-s3 ×1
boto ×1
cloud ×1
java ×1
javascript ×1
json ×1
node.js ×1
python ×1