Skip to content

Instantly share code, notes, and snippets.

Created February 12, 2015 09:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/bc26f48b036f0d0a011c to your computer and use it in GitHub Desktop.
Save anonymous/bc26f48b036f0d0a011c to your computer and use it in GitHub Desktop.
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