aboutsummaryrefslogtreecommitdiff
path: root/sphinx/sphinx.py
blob: 1fffa3e84abce4af7d7c07e3b1363af1d03e6889 (plain)
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
from .sphinxapi import *

import config

sphinxclient = SphinxClient()

sphinxclient.SetServer(host=config.SPHINX_HOST, port=config.SPHINX_PORT)

def search(request):
    """
    Simple sphinx seach function, return a array of all documents matching the
    search terms.
    """
    res = sphinxclient.Query(request)

    opts = {'before_match': '<b>', 'after_match':'</b>', 'chunk_separator': '...', 'limit': 400, 'around': 15}
    index = 'datas'

    response = []

    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

    return response