def main(argv): # defaults query = '' start = 0 nb_results = 10 try: opts, args = getopt.getopt(argv, "i:q:s:r:", \ ["lucene_index=", "query=", "start=", "nb_results="]) except getopt.GetoptError: usage() sys.exit(2) if not opts: usage() sys.exit() for opt, arg in opts: if opt in ("-i", "--lucene_index"): fsDir = FSDirectory.getDirectory(arg, False) searcher = IndexSearcher(fsDir) elif opt in ("-q", "--query"): query = arg elif opt in ("-s", "--start"): start = int(arg) elif opt in ("-r", "--nb_results"): nb_results = int(arg) doQuery(searcher, query, start, nb_results)
def searchDocuments(self, version, query, attribute=None): directory = DbDirectory(self.store.txn, self._db, self.store._blocks._db, self._flags) searcher = IndexSearcher(directory) query = QueryParser.parse(query, "contents", StandardAnalyzer()) docs = {} for i, doc in searcher.search(query): ver = long(doc['version']) if ver <= version: uuid = UUID(doc['owner']) dv = docs.get(uuid, None) if dv is None or dv[0] < ver: docAttr = doc['attribute'] if attribute is None or attribute == docAttr: docs[uuid] = (ver, docAttr) searcher.close() return docs
def _getdoc(self, filename, args): doc = "0 |" m = self.__class__.p.search(args) if m and filename == '/search': # doc = doQuery(m.group(1).split('+'), int(m.group(2)), int(m.group(3))) doc = doQuery(urllib.unquote(m.group(1)), int(m.group(2)), int(m.group(3))) return doc def do_GET(self): url = urlparse.urlsplit(self.path) doc = self._getdoc(url[2], url[3]) self._writeheaders(doc) self.wfile.write(doc) class SearchServer(HTTPServer): allow_reuse_address = 1 if __name__ == '__main__': if len(sys.argv) != 2: print "Usage: python lucene_server.py index_dir" else: indexDir = sys.argv[1] fsDir = FSDirectory.getDirectory(indexDir, False) searcher = IndexSearcher(fsDir) serveraddr = ('', SERVER_PORT) srvr = SearchServer(serveraddr, SearchRequestHandler) print "Ready to serve search queries" srvr.serve_forever()
results = [] for i, doc in hits: results.append([doc.get("name"), doc.get("owner").encode('gbk'), doc.get("title").encode('gbk')]) # sort result results.sort(lambda x,y: cmp(x[0],y[0])) for name,owner,title in results: print name, owner, title def test_fixture(): global BOARDSPATH BOARDSPATH = './' if __name__ == '__main__': #test_fixture() board = sys.argv[1] querystr = sys.argv[2].decode('gbk').strip() path = BOARDSPATH+board+'/'+RECENT_INDEX if not os.path.exists(path) or len(querystr) == 0: sys.exit(-1) directory = FSDirectory.getDirectory(path, False) searcher = IndexSearcher(directory) analyzer = StandardAnalyzer() run(searcher, analyzer, querystr) searcher.close()
def getIndexSearcher(self): # if not IndexSupport.searchers.has_key(self.indexPath) or not IndexSupport.searchers[self.indexPath].getIndexReader().isCurrent(): # IndexSupport.searchers[self.indexPath] = IndexSearcher(self.getIndexReader()) # return IndexSupport.searchers[self.indexPath] return IndexSearcher(self.getIndexReader())