2012-10-06 14 views
6

Sto appena iniziando a lavorare con boto per connettermi ad Amazon CloudSearch.Come connettersi a un dominio CloudSearch esistente in boto?

Ho gli esempi funzionanti, ma non riesco a trovare alcun esempio di connessione a un dominio esistente, tutti gli esempi creano un nuovo dominio.

Sto girando, ho trovato get_domain, ma fallisce se lo chiamo sull'oggetto di connessione.

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

Qualche suggerimento su come posso connettermi a un dominio esistente?

[modifica] ho iniziato da questo: http://boto.cloudhackers.com/en/latest/cloudsearch_tut.html

Quindi, tutto quello che sto facendo questo

import boto 
conn = boto.connect_cloudsearch() 

risposta

10

È possibile fare conn.list_domains() che restituirà un elenco di dominio oggetti per tutti i tuoi domini correnti o puoi fare conn.lookup('foo') che restituirà un oggetto Dominio per il nome di dominio specificato.

+0

Grazie! (Ho cancellato un commento precedente su questo non funzionante, si trattava di errore dell'operatore). – ThoughtfulHacking

+1

chiamata conn.lookup ('name') solleva il seguente errore: AttributeError: l'oggetto 'Layer2' non ha attributo 'lookup'. Cercando nel codice, non riesco a trovare un metodo di "ricerca" all'interno di CloudSearch. – waigani

+0

Hmm. Il modulo cloudsearch.layer2 definisce definitivamente un metodo '' lookup''. Ha avuto dal 2012/08/22 quando è stato aggiunto con questo impegno (https://github.com/boto/boto/commit/87cc02e496f0f803a07274b8976d14a45663a4ee). Forse stai usando una versione precedente di boto? – garnaat

0

questo ha funzionato per me,
abbiamo un solo dominio,
dom = Domain (truffa, con.describe_domains() [0])

2

Utilizzando boto 2.36, ho ottenuto questo lavoro da dare un'occhiata al codice sorgente.

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

Questa è la soluzione perfetta. Sto usando boto 2.38.0

Ho avuto lo stesso problema che sono affrontati da altri. Poi ho fatto questo script per collegare AWS dominio di ricerca e ottenere risultato

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) 

Let me know alcun errore. Spero che funzionerà per tutti.

0

ho inizialmente implementato la connessione utilizzando l'approccio Layer 2:

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

Tuttavia, dopo un po 'di profilazione ho trovato la latenza nella creazione di una connessione per essere molto alta.

Quando dico molto alto, intendo che il tempo per creare una connessione è stato pari a quello di eseguire effettivamente la query e ottenere una risposta (> 500 ms nella maggior parte dei casi).

La mia soluzione, quindi, era di creare direttamente il Domain. Nota: questa soluzione è fragile, ma lo fa la latenza diminuzione significativamente

È possibile creare il dominio facendo qualcosa di simile (molti di questi valori si possono trovare facendo 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' 
      } 
     }) 
Problemi correlati