MCPcopy Index your code
hub / github.com/1Panel-dev/MaxKB / create_knowledge_index

Function create_knowledge_index

apps/knowledge/serializers/common.py:243–265  ·  view source on GitHub ↗
(knowledge_id=None, document_id=None)

Source from the content-addressed store, hash-verified

241
242
243def create_knowledge_index(knowledge_id=None, document_id=None):
244 if knowledge_id is None and document_id is None:
245 raise AppApiException(500, _('Knowledge ID or Document ID must be provided'))
246
247 if knowledge_id is not None:
248 k_id = knowledge_id
249 else:
250 document = QuerySet(Document).filter(id=document_id).first()
251 k_id = document.knowledge_id
252
253 sql = f"SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'embedding' AND indexname = 'embedding_hnsw_idx_{k_id}'"
254 index = sql_execute(sql, [])
255 if not index:
256 sql = f"SELECT vector_dims(embedding) AS dims FROM embedding WHERE knowledge_id = '{k_id}' LIMIT 1"
257 result = sql_execute(sql, [])
258 if len(result) == 0:
259 return
260 dims = result[0]['dims']
261 # 超过2000维度不创建索引,pgvector hnsw索引不支持超过2000维度
262 if dims < 2000:
263 sql = f"""CREATE INDEX "embedding_hnsw_idx_{k_id}" ON embedding USING hnsw ((embedding::vector({dims})) vector_cosine_ops) WHERE knowledge_id = '{k_id}'"""
264 update_execute(sql, [])
265 maxkb_logger.info(f'Created index for knowledge ID: {k_id}')
266
267
268def drop_knowledge_index(knowledge_id=None, document_id=None):

Callers 1

embedding_by_documentMethod · 0.90

Calls 3

AppApiExceptionClass · 0.90
sql_executeFunction · 0.90
update_executeFunction · 0.90

Tested by

no test coverage detected