wangyunpeng пре 5 дана
родитељ
комит
951b311481

+ 2 - 0
core/src/main/java/com/tzld/videoVector/config/db/PgVectorDBConfig.java

@@ -1,5 +1,6 @@
 package com.tzld.videoVector.config.db;
 
+import com.tzld.videoVector.config.mybatis.HnswEfSearchInterceptor;
 import com.zaxxer.hikari.HikariDataSource;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.mybatis.spring.SqlSessionFactoryBean;
@@ -56,6 +57,7 @@ public class PgVectorDBConfig {
         org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
         configuration.setMapUnderscoreToCamelCase(true);
         configuration.setUseGeneratedKeys(true);
+        configuration.addInterceptor(new HnswEfSearchInterceptor());
         sessionFactory.setConfiguration(configuration);
         sessionFactory.setTypeAliasesPackage("com.tzld.videoVector");
         return sessionFactory.getObject();

+ 30 - 0
core/src/main/java/com/tzld/videoVector/config/mybatis/HnswEfSearchInterceptor.java

@@ -0,0 +1,30 @@
+package com.tzld.videoVector.config.mybatis;
+
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.plugin.Intercepts;
+import org.apache.ibatis.plugin.Invocation;
+import org.apache.ibatis.plugin.Signature;
+
+import java.sql.Connection;
+import java.sql.Statement;
+
+@Intercepts({
+    @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})
+})
+public class HnswEfSearchInterceptor implements Interceptor {
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        Connection connection = (Connection) invocation.getArgs()[0];
+        try (Statement stmt = connection.createStatement()) {
+            stmt.execute("SET hnsw.ef_search = 200");
+        }
+        return invocation.proceed();
+    }
+
+    @Override
+    public Object plugin(Object target) {
+        return org.apache.ibatis.plugin.Plugin.wrap(target, this);
+    }
+}