!7 cmodule AgiBlueSearch > DynPrintLog { start { dm_registerAs_directLink('agiBlueSearch); warmUp(); } void warmUp thread { temp enter(); repeat 9 { search("test", quiet := true); } search("test"); // will print benchmark } // API void searchAndPost(S query, O... _) q { agiBlue_server_postSearchResult(query, collect q(search(query, _))); } // searches page names only // pass agiBlueBotID to use different agi.blue instance L search(S query, O... _) { optPar bool quiet; optPar int maxResults = 100; //if (!quiet) print("Searching " + query); long time = sysNow(); virtual Concepts concepts = optPar_func cc(_, () -> agiBlue_server_mainConcepts(_)); L pages = cast call(concepts, 'conceptsOfType, 'Page); ScoredSearcher searcher = new(query); searcher.maxResults = maxResults; for (virtual Page page : pages) searcher.put(page, getString q(page)); L result = searcher!; if (!quiet) done2("Searched: " + query, time); ret result; } }