from .sphinxapi import * import config sphinxclient = SphinxClient() sphinxclient.SetServer(host=config.SPHINX_HOST, port=config.SPHINX_PORT) def search(request, index): """ Simple sphinx seach function, return a array of all documents matching the search terms. """ status = sphinxclient.Status() response = {'error': 1, 'msg': 'Sphinx server not available'} if status != None: res = sphinxclient.Query(request, index) opts = {'before_match': '', 'after_match':'', 'chunk_separator': '...', 'limit': 400, 'around': 15} response = [] if res != None: if 'matches' in res: n = 1 for match in res['matches']: attrsdump = '' for attr in res['attrs']: attrname = attr[0] attrtype = attr[1] if attrname != "content": value = match['attrs'][attrname] if attrtype==SPH_ATTR_TIMESTAMP: value = time.strftime ( '%Y-%m-%d %H:%M:%S', time.localtime(value) ) attrsdump = '%s, \'%s\'=\'%s\'' % ( attrsdump, attrname, value) docs = [] docs.append(''.join([line.strip('\n') for line in match['attrs']['content']])) res_excerpts = sphinxclient.BuildExcerpts(index=index, docs=docs, opts=opts, words=request) response.append({'id': match['id'], 'weight': match['weight'], 'url': match['attrs']['url'], 'title': match['attrs']['title'], 'excerpts': res_excerpts}) n += 1 else: response = {'error': 1, 'msg': 'Maybe `'+str(index)+'` is not an index in the database?'} return response