Install & Configure
Hint
This article is generated by AI translation.
Add Dependency
Before using jdbc-milvus, you need to add the corresponding Maven dependency to your project. Current version: 6.7.0
- Maven
- Gradle
<dependency>
<groupId>net.hasor</groupId>
<artifactId>jdbc-milvus</artifactId>
<version>6.7.0</version> <!-- Please use the latest version -->
</dependency>
implementation 'net.hasor:jdbc-milvus:6.7.0' // Please use the latest version
JDBC Connection
Connect using the standard JDBC URL format.
jdbc:dbvisitor:milvus://<host>:<port>/<database>?<parameters>
host: Milvus server address.port: Milvus gRPC port (default 19530).database: Database name (defaultdefault).parameters: Connection parameters, see Connection Parameters for details.
In cluster mode, multiple hosts are separated by ; and can include health check ports:
jdbc:dbvisitor:milvus://host1:19530:9091;host2:19530:9091/default
Example Code
1. Create Collection and Index
String url = "jdbc:dbvisitor:milvus://127.0.0.1:19530/default";
try (Connection conn = DriverManager.getConnection(url)) {
try (Statement stmt = conn.createStatement()) {
// Create Collection
stmt.executeUpdate("CREATE TABLE book_vectors ("
+ "book_id int64 PRIMARY KEY, "
+ "word_count int64, "
+ "book_intro float_vector(2)"
+ ")");
// Create Vector Index
stmt.executeUpdate("CREATE INDEX idx_book_intro ON book_vectors (book_intro) "
+ "USING \"IVF_FLAT\" WITH (nlist = 1024, metric_type = \"L2\")");
// Load Collection into Memory (must be done before searching)
stmt.executeUpdate("LOAD TABLE book_vectors");
}
}
2. Insert Data with PreparedStatement
String insertSql = "INSERT INTO book_vectors (book_id, word_count, book_intro) VALUES (?, ?, ?)";
try (PreparedStatement ps = conn.prepareStatement(insertSql)) {
ps.setLong(1, 1L);
ps.setLong(2, 1000L);
ps.setObject(3, Arrays.asList(0.1f, 0.2f)); // Use List<Float> for vectors
ps.executeUpdate();
}
3. Vector Search (KNN)
Use ORDER BY vector_field <-> vector LIMIT n syntax to perform nearest neighbor search.
String searchSql = "SELECT book_id, word_count FROM book_vectors "
+ "ORDER BY book_intro <-> ? LIMIT 5";
try (PreparedStatement ps = conn.prepareStatement(searchSql)) {
ps.setObject(1, Arrays.asList(0.1f, 0.2f));
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println("ID: " + rs.getLong("book_id")
+ ", Count: " + rs.getLong("word_count"));
}
}
}
4. Vector Range Search
Use WHERE vector_field <-> vector < radius or the vector_range function for range search.
// Method 1: Comparison expression
String rangeSql1 = "SELECT * FROM book_vectors WHERE book_intro <-> [0.1, 0.2] < 0.5";
// Method 2: vector_range function (recommended)
String rangeSql2 = "SELECT * FROM book_vectors WHERE vector_range(book_intro, [0.1, 0.2], 0.5)";
try (Statement stmt = conn.createStatement()) {
try (ResultSet rs = stmt.executeQuery(rangeSql2)) {
while (rs.next()) {
System.out.println("ID: " + rs.getLong("book_id"));
}
}
}
5. Scalar Filter Query
try (Statement stmt = conn.createStatement()) {
try (ResultSet rs = stmt.executeQuery(
"SELECT book_id, word_count FROM book_vectors WHERE word_count > 500 LIMIT 10")) {
while (rs.next()) {
System.out.println("ID: " + rs.getLong("book_id"));
}
}
}
6. Hybrid Query (Scalar Filter + Vector Search)
String sql = "SELECT book_id FROM book_vectors "
+ "WHERE word_count > 500 "
+ "ORDER BY book_intro <-> [0.1, 0.2] LIMIT 3";
try (Statement stmt = conn.createStatement()) {
try (ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
System.out.println("ID: " + rs.getLong("book_id"));
}
}
}
7. Using Hints
Override query behavior through SQL Hints.
try (Statement stmt = conn.createStatement()) {
// Override LIMIT and OFFSET
ResultSet rs = stmt.executeQuery(
"/*+ overwrite_find_limit=5, overwrite_find_skip=10 */ "
+ "SELECT * FROM book_vectors WHERE word_count > 0");
// Convert query to COUNT
ResultSet countRs = stmt.executeQuery(
"/*+ overwrite_find_as_count=true */ "
+ "SELECT * FROM book_vectors WHERE word_count > 500");
}