Created
February 12, 2015 09:08
-
-
Save anonymous/bc26f48b036f0d0a011c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from ferris import settings | |
import boto.cloudsearch2 | |
import logging | |
class CloudSearch(): | |
""" | |
boto's CloudSearch API wrapper for custom Ferris solutions | |
""" | |
conn = None | |
domain = None | |
doc_service = None | |
search_service = None | |
def __init__(self, aws_access_key_id='', aws_secret_access_key='', region='us-west-2'): | |
if not aws_access_key_id: | |
aws_access_key_id = settings.get('aws').get('access_key') | |
if not aws_secret_access_key: | |
aws_secret_access_key = settings.get('aws').get('secret_key') | |
self.conn = boto.connect_cloudsearch2(aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, region=region) | |
def set_domain(self, domain): | |
global global_domain | |
if global_domain: | |
self.domain = global_domain | |
else: | |
self.domain = self.conn.lookup(domain) | |
global_domain = self.domain | |
def add_document(self, _id, fields, commit=True): | |
self.doc_service = self.domain.get_document_service() | |
self.doc_service.add(_id, fields) | |
if commit: | |
try: | |
result = self.doc_service.commit() | |
if not result.status == 'success': | |
logging.error(result.response) | |
else: | |
logging.info('item reindexing succesful') | |
except: | |
logging.warning('commit might have failed - add_document') | |
def add_documents(self, documents): | |
self.doc_service = self.domain.get_document_service() | |
for document in documents: | |
_id = document.pop('_id') | |
self.add_document(_id, document, commit=False) | |
try: | |
result = self.doc_service.commit() | |
if not result.status == 'success': | |
logging.error(result.response) | |
except: | |
logging.warning('commit might have failed - add_documents') | |
def search_document(self, query, **kwargs): | |
self.search_service = self.domain.get_search_service() | |
if query[0] == '\'' and query[-1] == '\'': | |
return self.search_service.search(bq=query, **kwargs) | |
return self.search_service.search(q=query, **kwargs) | |
def delete_document(self, _id): | |
self.doc_service = self.domain.get_document_service() | |
self.doc_service.delete(_id) | |
try: | |
self.doc_service.commit() | |
except: | |
logging.warning('commit might have failed - delete_document') | |
def __delete(self): | |
self.domain.delete() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment