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()
5 Antworten
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.
Das hat bei mir funktioniert,
Wir haben nur eine Domain,
dom = Domain (con, con.describe_domains () [0])
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.
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
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'
}
})
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.