private void createVectorIndex(Configuration config) throws ElasticException {
		StringBuilder builder = new StringBuilder();
		builder.append("{ \"settings\": { ");
		builder.append("  \"index\": { ");
		builder.append("    \"analysis\": { ");
		builder.append("      \"tokenizer\": { ");
		builder.append("        \"lsh_").append(repository).append("\": { ");
		builder.append("          \"type\": \"lsh_tokenizer\", ");
		builder.append("          \"").append(ElasticUtilities.LSH_WEIGHTS).append("\": ");
		appendWeightSettings(builder, config);
		builder.append(",         \"").append(ElasticUtilities.IDF_CONFIG).append("\": ");
		appendLookupSettings(builder, config);
		builder.append(",         \"")
				.append(ElasticUtilities.K_SETTING)
				.append("\": ")
				.append(config.k);
		builder.append(",         \"")
				.append(ElasticUtilities.L_SETTING)
				.append("\": ")
				.append(config.L);
		builder.append(" } }, ");
		builder.append("      \"analyzer\": { ");
		builder.append("        \"lsh_analyzer\": { ");
		builder.append("          \"type\": \"custom\", ");
		builder.append("          \"tokenizer\": \"lsh_")
				.append(repository)
				.append("\" } } } } }, ");
		builder.append("  \"mappings\": { ");
		builder.append("    \"properties\": { ");
		builder.append("      \"features\": { ");
		builder.append("        \"type\": \"text\", ");
		builder.append("        \"norms\": false, ");
		builder.append("        \"index_options\": \"freqs\", ");
		builder.append("        \"analyzer\": \"lsh_analyzer\" } } } }");
		connection.executeStatementNoResponse(ElasticConnection.PUT, "vector", builder.toString());

		builder = new StringBuilder();
		builder.append("{ \"mappings\": { ");
		builder.append("    \"properties\": { ");
		builder.append("      \"count\": { ");
		builder.append("        \"type\": \"integer\", ");
		builder.append("        \"index\": false } } } }");
		connection.executeStatementNoResponse(ElasticConnection.PUT, "meta", builder.toString());
	}
This routine establishes the schema for the "vector" and "meta" document types
for a new database. It also sets up weights and hashes for the vector tokenizer (lsh_tokenizer).
@param config contains database configuration info
@throws ElasticException for communication problems with the server
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/elastic/ElasticDatabase.java