1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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
|