예제 #1
0
def search(query, start, end):

    # search
    dbindex = cfg.getPath('archiveindex')
    searcher = lucene_logic.Searcher(pathname=dbindex)
    query = query.rewrite(searcher.reader.reader)
    hits = searcher.search(query)

    hitList = sortHits(hits, searcher.reader.maxDoc()+2000)

    # prepare for highlighter
    formatter = SimpleHTMLFormatter("<span class='highlight'>", "</span>")
    highlighter = Highlighter( formatter, QueryScorer(query))
    highlighter.setTextFragmenter(SimpleFragmenter(50))
    analyzer = StandardAnalyzer()

    # build a MatchItem list
    result = []
    for i in xrange(start,end):
        if i >= hits.length():
            break
        item = MatchItem(hitList, i)
        item.highlight(analyzer, highlighter)
        #item.explaination = str(searcher.explain(query, item.id))
        result.append(item)

    searcher.close()
    return hits.length(), result
 def _findHighestId(self):
     """ Scan logs dir for files for the highest id.
         0 if no file found.
     """
     logdir = cfg.getPath('logs')
     files = filter(self.log_pattern.match, self._listdir(logdir))
     if not files:
         return 0
     files = [f.rjust(14) for f in files]
     top = max(files)
     return int(top.split('.')[0])
예제 #3
0
def main():

    import PyLucene

    init(CONFIG_FILENAME)
    setup()

    # log some system info
    platform = sys.platform
    if 'win32' in sys.platform: platform += str(sys.getwindowsversion())

    log.info('-'*70)
    log.info('%s %s', config.APPLICATION_NAME, cfg.get('version','number'))
    log.info('Python %s', sys.version)
    log.info('  Platform %s', platform)
    log.info('  pwd: %s, defaultencoding: %s', os.getcwd(), sys.getdefaultencoding())
    log.info('PyLucene %s Lucene %s', PyLucene.VERSION, PyLucene.LUCENE_VERSION)

    # show index version
    import lucene_logic
    dbindex = cfg.getPath('archiveindex')
    reader = lucene_logic.Reader(pathname=dbindex)
    version = reader.getVersion()
    log.info('  Index version %s', version)

    proxyThread = threading.Thread(target=proxyMain, name='proxy')
    #proxyThread.setDaemon(True)
    proxyThread.start()

    adminThread = PyLucene.Thread(runnable(adminMain))
    #adminThread.setDaemon(True)
    adminThread.start()

#    time.sleep(3)
    indexThread = PyLucene.Thread(runnable(indexMain))
    indexThread.start()

    # main thread sleep
    _shutdownEvent.wait()

    # shutdown
    log.fatal('System shutting down.')
    indexThread.join()
    log.fatal('indexThread terminated.')
    adminThread.join()
    log.fatal('adminThread terminated.')
    proxyThread.join()
    log.fatal('proxyThread terminated.')
    log.fatal('End of main thread.')


#if __name__ == '__main__':
#    main()
예제 #4
0
def setupLogging():
    filename = os.path.join(cfg.getPath('logs'), 'system.log')
    hdlr = logging.handlers.RotatingFileHandler(filename, 'a', 1100000, 4)
    formatter = logging.Formatter('%(asctime)s %(name)-10s - %(message)s')
    hdlr.setFormatter(formatter)
    rootlog = logging.getLogger()
    rootlog.addHandler(hdlr)
    rootlog.removeHandler(config.bootstrapHdlr)
    rootlog.setLevel(logging.DEBUG)

    # redirect stdout and stderr to log
    stdoutFp = LogFileObj(logging.getLogger('stdout'))
    stderrFp = LogFileObj(logging.getLogger('stderr'))
    sys.stdout = stdoutFp
    sys.stderr = stderrFp
    print 'stdout ready'
    print >>sys.stderr, 'stderr ready'
 def _getMsgLogPath(id):
     return os.path.join( cfg.getPath('logs'), id+'.qlog')