package org.genedb.crawl;
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.elasticsearch.ElasticSearchException;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.action.search.SearchRequestBuilder;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.elasticsearch.index.query.FieldQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.genedb.crawl.elasticsearch.LocalConnection;
/*
public class ElasticTest extends TestCase {
private Logger logger = Logger.getLogger(ElasticTest.class);
Client client;
LocalConnection connection;
List<RegionMap> regions = new ArrayList<RegionMap>();
final int organismID = 1;
class RegionMap {
String region;
int organismID;
String sequence;
RegionMap(String region, int organismID, String sequence) {
this.region = region;
this.organismID = organismID;
this.sequence = sequence;
}
}
private static String toString(ToXContent tmp) {
try {
return tmp
.toXContent(JsonXContent.unCachedContentBuilder(),
ToXContent.EMPTY_PARAMS).prettyPrint().string();
} catch (Exception ex) {
return "<ERROR:" + ex.getMessage() + ">";
}
}
void index(String key, int organism_id, String sequence) throws ElasticSearchException, IOException {
client.prepareIndex("annotations", "region", key)
.setSource(jsonBuilder()
.startObject()
.field("uniqueName", key)
.field("organism_id", organism_id)
.field("sequence", sequence)
.endObject()
)
.execute()
.actionGet();
}
SearchHits search(int organism_id, String[] fields) {
FieldQueryBuilder organismQuery =
QueryBuilders.fieldQuery("organism_id", organism_id);
SearchRequestBuilder srb = client
.prepareSearch("annotations")
.setTypes("region")
.setQuery(organismQuery);
// if any fields are specified, the source is not returned
if (fields != null) {
srb.addFields(fields);
}
System.out.println(toString(srb.internalBuilder()));
SearchResponse response = srb.execute()
.actionGet();
SearchHits hits = response.getHits();
return hits;
}
public void setUp() {
connection = new LocalConnection();
connection.setPathData("/tmp/es/data");
connection.setPathLogs("/tmp/es/logs");
connection.configure();
client = connection.getClient();
}
public void tearDown() {
connection.close();
}
public void test1() throws InterruptedException, ElasticSearchException, IOException {
regions.add(new RegionMap("region1", organismID, "atgc"));
regions.add(new RegionMap("region2", organismID, "atgcatgc"));
regions.add(new RegionMap("region3", organismID, "atgcatgcatgc"));
for (RegionMap regionMap : regions) {
index(regionMap.region, regionMap.organismID, regionMap.sequence);
}
logger.info("Waiting for green");
ClusterHealthRequest health = new ClusterHealthRequest();
health.waitForGreenStatus();
logger.info(client.admin().cluster().health(health).actionGet().getStatus());
SearchHits search = search(organismID, new String[] {"sequence"} );
assertEquals(regions.size(), search.getTotalHits());
for (SearchHit hit : search) {
logger.info(hit.id());
assertTrue(hit.field("sequence") != null);
}
}
}
*/