2012-10-06 23 views
6

我剛開始與boto合作連接到Amazon CloudSearch。如何連接到博託的現有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() 

回答

10

您可以做conn.list_domains()將返回所有的域對象的列表您當前域名,或者您可以執行conn.lookup('foo'),這將返回指定域名的域對象。

+0

謝謝! (我刪除了以前對此不起作用的評論,這是操作員錯誤)。 – ThoughtfulHacking

+1

調用conn。lookup('name')引發以下錯誤:AttributeError:'Layer2'對象沒有屬性'lookup'。通過代碼搜索,我無法在CloudSearch中找到「查找」方法。 – waigani

+0

嗯。 cloudsearch.layer2模塊明確定義了一個「查找」方法。自2012年8月22日加入此提交(https://github.com/boto/boto/commit/87cc02e496f0f803a07274b8976d14a45663a4ee)以來,它已經有了它。也許你正在使用老版本的boto? – garnaat

0

這個工作對我來說,
我們只有一個域,
DOM =域(CON,con.describe_domains()[0])

2

使用博託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 
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) 

讓我知道任何錯誤。我希望這會爲所有人工作。

0

我初步實現並採用二層方式連接:

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

但是,在一些分析後,我發現創建連接的延遲爲非常高高。

當我說的非常高時,我的意思是創建連接的時間與實際執行查詢並獲得響應的時間相當(在大多數情況下> 500ms)。

因此,我的解決方案是直接創建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' 
      } 
     })