package com.cadrlife.devsearch.agent.service.analysis; import com.cadrlife.devsearch.agent.AgentModule; import com.google.inject.Guice; import com.google.inject.Injector; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.client.Client; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; public class JavaReferenceFinderTestMain { public static final String INDEX = "devsearch"; TimeValue keepAlive = new TimeValue(5, TimeUnit.MINUTES); public static void main(String[] args) { AgentModule agentModule = new AgentModule(); agentModule.setConfigFile("C:/temp/dev-search/dev-search-agent.properties"); agentModule.setCheckoutPath("C:/temp/dev-search/checkout"); Injector injector = Guice.createInjector(agentModule); Client esClient = injector.getInstance(Client.class); try { new JavaReferenceFinderTestMain().go(esClient); } finally { esClient.close(); } esClient.close(); } private void go(Client esClient) { JavaReferenceFinder javaReferenceFinder = new JavaReferenceFinder(esClient, INDEX); SearchResponse searchResp = esClient.prepareSearch(INDEX) .setTypes("doc") .setSearchType(SearchType.SCAN) .setQuery(QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("repo", "Stash-PG")) .must(QueryBuilders.termQuery("project", "Vinzilla")) .must(QueryBuilders.termQuery("javaName", "OdometerCompositeRule")) ) .setScroll(keepAlive) .setSize(50) .execute().actionGet(); System.out.println(searchResp); long totalHits = searchResp.getHits().getTotalHits(); long hitsComplete = 0; while(true) { SearchResponse scrollResp = esClient.prepareSearchScroll(searchResp.getScrollId()) .setScroll(keepAlive) .execute() .actionGet(); BulkRequestBuilder bulk = esClient.prepareBulk(); if (scrollResp.getHits().getHits().length == 0) { break; } System.out.println((totalHits - hitsComplete) +" remaining"); for (SearchHit hit : scrollResp.getHits()) { Map<String, Object> source = hit.getSource(); System.out.println("Found " + source.get("filePath")); Object javaName = source.get("javaName"); System.out.println("JavaName " + javaName); Object javaImports = source.get("javaImports"); if (null != javaImports && javaImports instanceof Iterable) { List<String> references = new ArrayList<>(); javaReferenceFinder.extractImportsToReferences((Iterable) javaImports, references); javaReferenceFinder.addSamePackageReferences(source.get("javaPackage").toString(), javaName.toString(), source.get("content").toString(), references); // System.out.println(references); bulk.add(esClient.prepareUpdate(INDEX, JavaReferenceFinder.DOC_INDEX, hit.getId()) .setDoc("references", references)); } // findByJavaName(javaName.toString()); // } // if (null != javaName) { // findByJavaName(javaName.toString()); // } // bulk.add(client.prepareIndex("devsearch",hit.type(),hit.getId()).setSource(hit.getSource())); } hitsComplete += scrollResp.getHits().hits().length; if (bulk.numberOfActions() > 0) { BulkResponse bulkResponse = bulk.execute().actionGet(); if (bulkResponse.hasFailures()) { System.out.println("Bulk failed" + bulkResponse.buildFailureMessage()); break; } } } } }