feat: support config.ini for PostgreSQL vector index settings
- Add support for reading vector_index_type, hnsw_m, hnsw_ef, and ivfflat_lists from config.ini - Maintain backward compatibility with environment variables - Update config.ini.example with new PostgreSQL vector index options - Follow existing configuration priority: env vars > config.ini > defaults
This commit is contained in:
parent
dec4148075
commit
16c9a81f4c
2 changed files with 32 additions and 5 deletions
|
|
@ -26,8 +26,12 @@ port = 5432
|
||||||
user = your_username
|
user = your_username
|
||||||
password = your_password
|
password = your_password
|
||||||
database = your_database
|
database = your_database
|
||||||
workspace = default # 可选,默认为default
|
# workspace = default
|
||||||
max_connections = 12
|
max_connections = 12
|
||||||
|
vector_index_type = HNSW # HNSW or IVFFLAT
|
||||||
|
hnsw_m = 16
|
||||||
|
hnsw_ef = 64
|
||||||
|
ivfflat_lists = 100
|
||||||
|
|
||||||
[memgraph]
|
[memgraph]
|
||||||
uri = bolt://localhost:7687
|
uri = bolt://localhost:7687
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,9 @@ class PostgreSQLDB:
|
||||||
|
|
||||||
# Vector configuration
|
# Vector configuration
|
||||||
self.vector_index_type = config.get("vector_index_type")
|
self.vector_index_type = config.get("vector_index_type")
|
||||||
|
self.hnsw_m = config.get("hnsw_m")
|
||||||
|
self.hnsw_ef = config.get("hnsw_ef")
|
||||||
|
self.ivfflat_lists = config.get("ivfflat_lists")
|
||||||
|
|
||||||
if self.user is None or self.password is None or self.database is None:
|
if self.user is None or self.password is None or self.database is None:
|
||||||
raise ValueError("Missing database user, password, or database")
|
raise ValueError("Missing database user, password, or database")
|
||||||
|
|
@ -1155,7 +1158,7 @@ class PostgreSQLDB:
|
||||||
create_vector_index_sql = f"""
|
create_vector_index_sql = f"""
|
||||||
CREATE INDEX {vector_index_name}
|
CREATE INDEX {vector_index_name}
|
||||||
ON {k} USING hnsw (content_vector vector_cosine_ops)
|
ON {k} USING hnsw (content_vector vector_cosine_ops)
|
||||||
WITH (m = {os.getenv("POSTGRES_HNSW_M", 16)}, ef_construction = {os.getenv("POSTGRES_HNSW_EF", 200)})
|
WITH (m = {self.hnsw_m}, ef_construction = {self.hnsw_ef})
|
||||||
"""
|
"""
|
||||||
logger.info(f"Creating hnsw index {vector_index_name} on table {k}")
|
logger.info(f"Creating hnsw index {vector_index_name} on table {k}")
|
||||||
await self.execute(create_vector_index_sql)
|
await self.execute(create_vector_index_sql)
|
||||||
|
|
@ -1195,7 +1198,7 @@ class PostgreSQLDB:
|
||||||
create_sql = f"""
|
create_sql = f"""
|
||||||
CREATE INDEX {index_name}
|
CREATE INDEX {index_name}
|
||||||
ON {k} USING ivfflat (content_vector vector_cosine_ops)
|
ON {k} USING ivfflat (content_vector vector_cosine_ops)
|
||||||
WITH (lists = {os.getenv("POSTGRES_IVFFLAT_LISTS", 100)})
|
WITH (lists = {self.ivfflat_lists})
|
||||||
"""
|
"""
|
||||||
logger.info(f"Creating ivfflat index {index_name} on table {k}")
|
logger.info(f"Creating ivfflat index {index_name} on table {k}")
|
||||||
await self.execute(create_sql)
|
await self.execute(create_sql)
|
||||||
|
|
@ -1209,7 +1212,6 @@ class PostgreSQLDB:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to create ivfflat index on {k}: {e}")
|
logger.error(f"Failed to create ivfflat index on {k}: {e}")
|
||||||
|
|
||||||
|
|
||||||
async def query(
|
async def query(
|
||||||
self,
|
self,
|
||||||
sql: str,
|
sql: str,
|
||||||
|
|
@ -1350,7 +1352,28 @@ class ClientManager:
|
||||||
"POSTGRES_SSL_CRL",
|
"POSTGRES_SSL_CRL",
|
||||||
config.get("postgres", "ssl_crl", fallback=None),
|
config.get("postgres", "ssl_crl", fallback=None),
|
||||||
),
|
),
|
||||||
"vector_index_type": os.environ.get("POSTGRES_VECTOR_INDEX_TYPE", "HNSW"),
|
"vector_index_type": os.environ.get(
|
||||||
|
"POSTGRES_VECTOR_INDEX_TYPE",
|
||||||
|
config.get("postgres", "vector_index_type", fallback="HNSW"),
|
||||||
|
),
|
||||||
|
"hnsw_m": int(
|
||||||
|
os.environ.get(
|
||||||
|
"POSTGRES_HNSW_M",
|
||||||
|
config.get("postgres", "hnsw_m", fallback="16"),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"hnsw_ef": int(
|
||||||
|
os.environ.get(
|
||||||
|
"POSTGRES_HNSW_EF",
|
||||||
|
config.get("postgres", "hnsw_ef", fallback="64"),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
"ivfflat_lists": int(
|
||||||
|
os.environ.get(
|
||||||
|
"POSTGRES_IVFFLAT_LISTS",
|
||||||
|
config.get("postgres", "ivfflat_lists", fallback="100"),
|
||||||
|
)
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue