private void createExecutableIndex() throws ElasticException {
		StringBuilder builder = new StringBuilder();
		builder.append("{ \"mappings\": { ");
		builder.append("    \"properties\": { ");
		builder.append("      \"md5\": { ");				// "exe" properties
		builder.append("        \"type\": \"keyword\" }, ");
		builder.append("      \"name_exec\": { ");
		builder.append("        \"type\": \"keyword\" }, ");
		builder.append("      \"architecture\": { ");
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"name_compiler\": { ");
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"ingest_date\": { ");
		builder.append("        \"type\": \"date\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"repository\": { ");
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"path\": { ");
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"execategory\": { ");
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"name_func\": { ");			// "function" properties
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"doc_values\": false }, ");
		builder.append("      \"id_signature\": { ");
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"doc_values\": false }, ");
		builder.append("      \"flags\": { ");
		builder.append("        \"type\": \"integer\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"addr\": { ");
		builder.append("        \"type\": \"long\", ");
		builder.append("        \"doc_values\": false }, ");
		builder.append("      \"childid\": { ");
		builder.append("        \"type\": \"keyword\", ");
		builder.append("        \"index\": false }, ");
		builder.append("      \"join_field\": { ");			// parent/child relation between exe and function
		builder.append("        \"type\": \"join\", ");
		builder.append("        \"relations\": { ");
		builder.append("          \"exe\": \"function\" }, ");
		builder.append("        \"eager_global_ordinals\": true } } } }");

		connection.executeStatementNoResponse(ElasticConnection.PUT, "executable",
			builder.toString());
	}
This routine establishes the schema for "exe" and "function" document types in a new database.
@throws ElasticException for communication problems with the server
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java