2012-10-06 22 views
6

Tôi chỉ bắt đầu làm việc với boto để kết nối với Amazon CloudSearch.Làm cách nào để kết nối với miền CloudSearch hiện có trong boto?

Tôi đã nhận các ví dụ hoạt động, nhưng tôi không thể tìm thấy bất kỳ ví dụ nào về kết nối với miền hiện có, tất cả các ví dụ đều tạo một miền mới.

Poking xung quanh, tôi tìm thấy get_domain, nhưng điều đó không thành công nếu tôi gọi nó trên đối tượng kết nối.

>>> conn.get_domain('foo') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'Layer2' object has no attribute 'get_domain' 

Bất kỳ đề xuất nào về cách tôi có thể kết nối với miền hiện có?

[sửa] tôi bắt đầu từ đây: http://boto.cloudhackers.com/en/latest/cloudsearch_tut.html

Vì vậy, tất cả tôi đang làm điều này

import boto 
conn = boto.connect_cloudsearch() 

Trả lời

10

Bạn có thể làm conn.list_domains() mà sẽ trả về một danh sách các tên miền đối tượng cho tất cả các bạn tên miền hiện tại hoặc bạn có thể làm conn.lookup('foo') sẽ trả về đối tượng Miền cho tên miền được chỉ định.

+0

Cảm ơn! (Tôi đã xóa một bình luận trước đó về việc này không hoạt động; đó là lỗi của nhà điều hành). – ThoughtfulHacking

+1

gọi điện cho conn.tra cứu ('name') tăng lỗi sau: AttributeError: đối tượng 'Layer2' không có thuộc tính 'tra cứu'. Tìm kiếm thông qua mã, tôi không thể tìm thấy phương pháp 'tra cứu' trong CloudSearch. – waigani

+0

Hmm. Mô-đun cloudearch.layer2 chắc chắn định nghĩa phương thức 'lookup''. Nó đã có nó kể từ 2012/08/22 khi nó được thêm vào với cam kết này (https://github.com/boto/boto/commit/87cc02e496f0f803a07274b8976d14a45663a4ee). Có lẽ bạn đang sử dụng một phiên bản cũ của boto? – garnaat

0

này làm việc cho tôi,
chúng tôi chỉ có một tên miền,
dom = tên miền (con, con.describe_domains() [0])

2

Sử dụng boto 2,36, tôi đã làm việc này bằng cách tham gia một cái nhìn tại mã nguồn.

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

Đây là giải pháp hoàn hảo. Tôi đang sử dụng boto 2.38.0

Tôi gặp vấn đề tương tự mà phải đối mặt với vấn đề khác. Sau đó, tôi đã thực hiện kịch bản này để kết nối miền tìm kiếm AWS và nhận được kết quả

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) 

Hãy cho tôi biết bất kỳ lỗi. Tôi hy vọng điều này sẽ làm việc cho tất cả.

0

ban đầu tôi thực hiện các kết nối sử dụng phương pháp Layer2:

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

Tuy nhiên, sau khi một số hồ sơ tôi thấy độ trễ trong việc tạo kết nối là rất cao.

Khi tôi nói rất cao, ý tôi là thời gian để tạo kết nối đã cạnh tranh với thời gian thực sự truy vấn và nhận được phản hồi (> 500ms trong hầu hết các trường hợp).

Giải pháp của tôi, do đó, là tạo trực tiếp số Domain. Lưu ý: giải pháp này là giòn, nhưng nó giảm độ trễ đáng kể

Bạn có thể tạo các miền bằng cách làm một cái gì đó tương tự (nhiều trong số những giá trị có thể được tìm thấy bằng cách làm 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' 
      } 
     }) 
Các vấn đề liên quan