2012-10-06 10 views
6

Estoy empezando a trabajar con boto para conectarme a Amazon CloudSearch.¿Cómo me conecto a un dominio existente de CloudSearch en boto?

Obtuve los ejemplos funcionando, pero no puedo encontrar ningún ejemplo de conexión a un dominio existente, todos los ejemplos crean un nuevo dominio.

Buscando, encontré get_domain, pero eso falla si lo llamo en el objeto de conexión.

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

¿Alguna sugerencia sobre cómo puedo conectarme a un dominio existente?

[editar] empecé a esto: http://boto.cloudhackers.com/en/latest/cloudsearch_tut.html

Por lo tanto, todo lo que estoy haciendo esto

import boto 
conn = boto.connect_cloudsearch() 

Respuesta

10

Puede hacerlo conn.list_domains() que devolverá una lista de objetos de dominio de la totalidad de su dominios actuales o puede hacer conn.lookup('foo') que devolverá un objeto de Dominio para el nombre de dominio especificado.

+0

Gracias! (Eliminé un comentario anterior acerca de que esto no funcionaba, era un error del operador). – ThoughtfulHacking

+1

llamada conn.lookup ('nombre') genera el siguiente error: AttributeError: el objeto 'Layer2' no tiene ningún atributo 'lookup'. Buscando a través del código, no puedo encontrar un método de "búsqueda" dentro de CloudSearch. – waigani

+0

Hmm. El módulo cloudsearch.layer2 definitivamente define un método '' lookup''. Lo ha tenido desde 2012/08/22 cuando se agregó con este compromiso (https://github.com/boto/boto/commit/87cc02e496f0f803a07274b8976d14a45663a4ee). Tal vez estás usando una versión anterior de boto? – garnaat

0

esta trabajado para mí,
que tienen un solo dominio,
dom = Dominio (estafadores, con.describe_domains() [0])

2

Usando boto 2,36, conseguí este trabajo por echar un vistazo en el código fuente.

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

Esta es la solución perfecta. Estoy usando el boto 2.38.0

Tuve el mismo problema que otros. Entonces hice este script para conectar dominio de búsqueda AWS y obtener resultado

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) 

Avísame cualquier error. Espero que esto funcione para todos.

0

inicialmente implementado la conexión utilizando el enfoque de capa 2:

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

Sin embargo, después de algunos perfiles encontré la latencia en la creación de una conexión para ser muy alto.

Cuando digo muy alto, me refiero a que el momento de crear una conexión era rivalizar con el tiempo para realizar realmente la consulta y obtener una respuesta (> 500ms en la mayoría de los casos).

Mi solución, por lo tanto, era crear el Domain directamente. Nota: esta solución es frágil, pero lo hace de manera significativa disminución de la latencia

Puede crear el dominio haciendo algo como (muchos de estos valores se puede encontrar haciendo 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' 
      } 
     }) 
Cuestiones relacionadas