Ich fange gerade an, mit boto zu arbeiten, um eine Verbindung zu Amazon CloudSearch herzustellen.

Ich habe die Beispiele zum Laufen gebracht, aber ich kann keine Beispiele für die Verbindung zu einer vorhandenen Domäne finden. Alle Beispiele erstellen eine neue Domäne.

Beim Stöbern habe ich get_domain gefunden, aber das schlägt fehl, wenn ich es für das Verbindungsobjekt aufrufe.

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

Irgendwelche Vorschläge, wie ich mich mit einer vorhandenen Domain verbinden kann?

[bearbeiten] Ich habe damit begonnen: http://boto.cloudhackers.com/en/latest/cloudsearch_tut. HTML

Also mache ich das alles

import boto
conn = boto.connect_cloudsearch()
6
ThoughtfulHacking 6 Okt. 2012 im 23:33

5 Antworten

Beste Antwort

Sie können entweder conn.list_domains() ausführen, wodurch eine Liste von Domänenobjekten für alle Ihre aktuellen Domänen zurückgegeben wird, oder Sie können conn.lookup('foo') ausführen, um ein Domänenobjekt für den angegebenen Domänennamen zurückzugeben.

10
garnaat 6 Okt. 2012 im 20:33

Das hat bei mir funktioniert,
Wir haben nur eine Domain,
dom = Domain (con, con.describe_domains () [0])

0
user2085643 8 Juli 2013 im 14:28

Dies ist die perfekte Lösung. Ich benutze Boto 2.38.0

Ich hatte das gleiche Problem, mit dem andere konfrontiert sind. Dann habe ich dieses Skript erstellt, um eine aws-Suchdomäne zu verbinden und ein Ergebnis zu erhalten

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)

Lassen Sie mich einen Fehler wissen. Ich hoffe, dass dies für alle funktioniert.

7
jatin 26 Mai 2015 im 09:06

Mit boto 2.36 habe ich das durch einen Blick auf den Quellcode zum Laufen gebracht.

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
2
Andrew K 19 März 2015 im 23:48

Ich habe die Verbindung zunächst mit dem Layer2-Ansatz implementiert:

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

Nach einigen Profilen stellte ich jedoch fest, dass die Latenz beim Erstellen einer Verbindung sehr hoch ist.

Wenn ich sehr hoch sage, meine ich, dass die Zeit zum Herstellen einer Verbindung mit der Zeit konkurrierte, um die Abfrage tatsächlich durchzuführen und eine Antwort zu erhalten (in den meisten Fällen> 500 ms).

Meine Lösung bestand daher darin, das Domain direkt zu erstellen. Hinweis: Diese Lösung ist spröde, verringert jedoch die Latenz erheblich

Sie können die Domäne erstellen, indem Sie Folgendes tun (viele dieser Werte können mit aws cloudsearch describe-domains ermittelt werden):

        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'
            }
        })
0
Bobby 7 Juni 2017 im 18:10