package de.danielbasedow.prospecter.benchmark;
import com.fasterxml.jackson.core.io.JsonStringEncoder;
import de.danielbasedow.prospecter.core.MalformedQueryException;
import de.danielbasedow.prospecter.core.Matcher;
import de.danielbasedow.prospecter.core.document.Document;
import de.danielbasedow.prospecter.core.schema.Schema;
import de.danielbasedow.prospecter.core.schema.SchemaBuilder;
import de.danielbasedow.prospecter.core.schema.SchemaBuilderJSON;
import de.danielbasedow.prospecter.core.schema.SchemaConfigurationError;
import java.io.*;
import java.util.Date;
public class TxtFileLoader {
public static Schema buildSchema(String fileName) throws SchemaConfigurationError {
SchemaBuilder schemaBuilder = new SchemaBuilderJSON(new File(fileName));
return schemaBuilder.getSchema();
}
public static String buildJsonQuery(String queryString, long id) {
JsonStringEncoder encoder = JsonStringEncoder.getInstance();
return "{" +
"\"id\": " + String.valueOf(id) + "," +
"\"query\": {" +
"\"and\": [" +
"{" +
"\"field\": \"textField\"," +
"\"condition\": \"match\"," +
"\"value\": \"" + new String(encoder.quoteAsString(queryString)) + "\"" +
"}" +
"]" +
"}" +
"}";
}
public static String getJsonDoc() {
String line;
try {
BufferedReader testDoc = new BufferedReader(new FileReader(new File("testdoc.txt")));
String queryStr = "";
while ((line = testDoc.readLine()) != null) {
queryStr = queryStr + " " + line;
}
JsonStringEncoder encoder = JsonStringEncoder.getInstance();
return "{\"textField\": \"" + new String(encoder.quoteAsString(queryStr)) + "\"}";
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
throw new RuntimeException();
}
public static void main(String[] args) {
try {
Schema schema = buildSchema(args[0]);
String doc = getJsonDoc();
String line;
BufferedReader br = new BufferedReader(new FileReader(new File(args[1])));
long i = 0;
while ((line = br.readLine()) != null) {
i++;
try {
schema.addQuery(buildJsonQuery(line.trim(), i));
} catch (MalformedQueryException mqe) {
}
if (i % 10000 == 0) {
measure(schema, doc, i);
}
}
br.close();
schema.close();
printVMStats();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void printVMStats() {
Runtime runtime = Runtime.getRuntime();
System.out.println("used: " + (runtime.totalMemory() - runtime.freeMemory()));
runtime.gc();
System.out.println("used: " + (runtime.totalMemory() - runtime.freeMemory()));
}
public static void measure(Schema schema, String jsonDoc, long queryCount) {
long sumQueryTime = 0;
Runtime runtime = Runtime.getRuntime();
for (int i = 0; i < 10; i++) {
Document doc = schema.getDocumentBuilder().build(jsonDoc);
long startTime = new Date().getTime();
Matcher m = schema.matchDocument(doc);
m.getMatchedQueries();
long endTime = new Date().getTime();
sumQueryTime += endTime - startTime;
}
runtime.gc();
double avgQueryTime = sumQueryTime / 10.0;
System.out.println(String.valueOf(queryCount) + ";" + String.valueOf(avgQueryTime) + ";" + String.valueOf(runtime.totalMemory() - runtime.freeMemory()));
}
}