如何连接到boto中的现有CloudSearch域?

时间:2012-10-06 19:33:51

标签: python amazon-web-services boto amazon-cloudsearch

我刚刚开始使用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'

有关如何连接到现有域的任何建议?

[编辑] 我从这开始:http://boto.cloudhackers.com/en/latest/cloudsearch_tut.html

所以,我正在做这件事

import boto
conn = boto.connect_cloudsearch()

5 个答案:

答案 0 :(得分:10)

您可以conn.list_domains()执行返回所有当前域的域对象列表,也可以执行conn.lookup('foo'),它将返回指定域名的域对象。

答案 1 :(得分:7)

这是完美的解决方案。 我正在使用boto 2.38.0

我遇到了其他问题。然后我制作了这个脚本来连接aws搜索域并获得结果

import boto.cloudsearch2
from boto.cloudsearch2.layer2 import Layer2
from boto.cloudsearch2.domain import Domain

# from boto.cloudsearch.domain import Domain
conn = boto.cloudsearch2.connect_to_region("xxxxxx",
                aws_access_key_id='xxxxxxxxxx',
                aws_secret_access_key='xxxxxxxxx')

domain_data =  conn.describe_domains('domaainname')

domain_data = (domain_data['DescribeDomainsResponse']
                          ['DescribeDomainsResult']
                          ['DomainStatusList'])

domain = Domain(conn, domain_data[0])
search_service = domain.get_search_service()
results = search_service.search(q="abc")

print map(lambda x: x, results)

让我知道任何错误。我希望这对所有人都有用。

答案 2 :(得分:2)

使用boto 2.36,我通过查看源代码来实现这一点。

import boto.cloudsearch
# login to AWS
conn = boto.connect_cloudsearch2(region="us-west-1",
                aws_access_key_id='xxxxx',
                aws_secret_access_key='xxxxx')


# get the right Domain:
domain = conn.lookup('toolbox')

print domain

答案 3 :(得分:0)

这对我有用,
我们只有一个域名,
dom = Domain(con,con.describe_domains()[0])

答案 4 :(得分:0)

我最初使用Layer2方法实现连接:

Layer2(region='region name').lookup('domain name')

然而,经过一些分析后,我发现创建连接的延迟非常高。

当我说非常高时,我的意思是创建连接的时间可以与实际执行查询并获得响应的时间相媲美(在大多数情况下大约为500毫秒)。

因此,我的解决方案是直接创建Domain注意:此解决方案很脆弱,但确实会显着降低延迟

您可以通过执行类似的操作来创建域(通过执行aws cloudsearch describe-domains可以找到许多这些值):

        domain = Domain(boto.cloudsearch2.connect_to_region('region name'), {
            'Created': True,
            'Deleted': False,
            'Processing': False,
            'RequiresIndexDocuments': False,
            'DomainId': 'domain_id',
            'DomainName': 'domain_name',
            'SearchInstanceCount': 2,
            'SearchPartitionCount': 1,
            'DocService': {
                'Endpoint': 'doc_service_endpoint',
            },
            'ARN': 'domain_arn',
            'SearchService': {
                'Endpoint': 'search_service_endpoint'
            }
        })