◾Installation & Begin


◾DBMS

🔻system

🔸db instance management

◾GraphAcademy

GraphAcademy

◾Vector Index

🔻create embeddings

doc: https://neo4j.com/docs/genai/tutorials/embeddings-vector-indexes/embeddings/sentence-transformers/ doc: https://neo4j.com/docs/cypher-manual/current/indexes/semantic-indexes/vector-indexes/

  1. embedding vector를 생성하는 과정은 open source 또는 cloud api를 통해 해야 함. neo4j에서 embedding 해주는 기능은 없음.

  2. embedding vector를 db에 주입하는 과정은 cypher query로 수행됨.

    MATCH (m) // 특정 노드 또는 엣지 검색
    CALL db.create.setNodeVectorProperty(m, 'embedding', $embeddings) // m 객체에 embedding 속성으로 임베딩 벡터 추가.
    
    # python script
    async def upsert_embed(self, tmp_node: dict[str, str]):
    	"""vector index를 노드 또는 엣지에 추가
    	tmp_node example)
    	tmp_node = {
    		'entity_name': "최정민",
    		'entity_type': "CHARACTER",
    		'description': "desc",
    		'__vector__': list[float],
    		'__id__': "최정민"
    	}
    	"""
    	embeddings = tmp_node.get("__vector__", None)
    	if embeddings is None:
        logger.warning(f"[-] no embeddings in {tmp_node}")
        return
    	embeddings = list(embeddings)
    	query = """
    	UNWIND $tmp_node as tmp
    	MATCH (m:ENTITY {entity_name: tmp.entity_name})
    	CALL db.create.setNodeVectorProperty(m, 'embedding', $embeddings)
    	"""
    	parameters = {
        "tmp_node": tmp_node, 
        'embeddings': embeddings
    	}
    	logger.info(f"[-] Embeddings for {tmp_node['entity_name']} upserted")
    	return await self._execute_write_query(query, parameters)