참고소스 수정본
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from random import random
|
||||
|
||||
from neo4j import GraphDatabase
|
||||
from neo4j_graphrag.embeddings.base import Embedder
|
||||
from neo4j_graphrag.indexes import create_fulltext_index, create_vector_index
|
||||
from neo4j_graphrag.retrievers import HybridCypherRetriever
|
||||
|
||||
URI = "neo4j://localhost:7687"
|
||||
AUTH = ("neo4j", "password")
|
||||
|
||||
INDEX_NAME = "embedding-name"
|
||||
FULLTEXT_INDEX_NAME = "fulltext-index-name"
|
||||
DIMENSION = 1536
|
||||
|
||||
# Connect to Neo4j database
|
||||
driver = GraphDatabase.driver(URI, auth=AUTH)
|
||||
|
||||
|
||||
# Create Embedder object
|
||||
class CustomEmbedder(Embedder):
|
||||
def embed_query(self, text: str) -> list[float]:
|
||||
return [random() for _ in range(DIMENSION)]
|
||||
|
||||
|
||||
embedder = CustomEmbedder()
|
||||
|
||||
# Creating the index
|
||||
create_vector_index(
|
||||
driver,
|
||||
INDEX_NAME,
|
||||
label="Document",
|
||||
embedding_property="vectorProperty",
|
||||
dimensions=DIMENSION,
|
||||
similarity_fn="euclidean",
|
||||
)
|
||||
create_fulltext_index(
|
||||
driver, FULLTEXT_INDEX_NAME, label="Document", node_properties=["vectorProperty"]
|
||||
)
|
||||
|
||||
# Initialize the retriever
|
||||
retrieval_query = "MATCH (node)-[:AUTHORED_BY]->(author:Author)RETURN author.name"
|
||||
retriever = HybridCypherRetriever(
|
||||
driver, INDEX_NAME, FULLTEXT_INDEX_NAME, retrieval_query, embedder
|
||||
)
|
||||
|
||||
# Upsert the query
|
||||
vector = [random() for _ in range(DIMENSION)]
|
||||
insert_query = (
|
||||
"MERGE (n:Document {id: $id})"
|
||||
"WITH n "
|
||||
"CALL db.create.setNodeVectorProperty(n, 'vectorProperty', $vector)"
|
||||
"RETURN n"
|
||||
)
|
||||
parameters = {
|
||||
"id": 0,
|
||||
"vector": vector,
|
||||
}
|
||||
driver.execute_query(insert_query, parameters)
|
||||
|
||||
# Perform the similarity search for a text query
|
||||
query_text = "Find me a book about Fremen"
|
||||
print(retriever.search(query_text=query_text, top_k=5))
|
||||
@@ -0,0 +1,61 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from random import random
|
||||
|
||||
from neo4j import GraphDatabase
|
||||
from neo4j_graphrag.embeddings.base import Embedder
|
||||
from neo4j_graphrag.indexes import create_fulltext_index, create_vector_index
|
||||
from neo4j_graphrag.retrievers import HybridRetriever
|
||||
|
||||
URI = "neo4j://localhost:7687"
|
||||
AUTH = ("neo4j", "password")
|
||||
|
||||
INDEX_NAME = "embedding-name"
|
||||
FULLTEXT_INDEX_NAME = "fulltext-index-name"
|
||||
DIMENSION = 1536
|
||||
|
||||
# Connect to Neo4j database
|
||||
driver = GraphDatabase.driver(URI, auth=AUTH)
|
||||
|
||||
|
||||
# Create Embedder object
|
||||
class CustomEmbedder(Embedder):
|
||||
def embed_query(self, text: str) -> list[float]:
|
||||
return [random() for _ in range(DIMENSION)]
|
||||
|
||||
|
||||
embedder = CustomEmbedder()
|
||||
|
||||
# Creating the index
|
||||
create_vector_index(
|
||||
driver,
|
||||
INDEX_NAME,
|
||||
label="Document",
|
||||
embedding_property="vectorProperty",
|
||||
dimensions=DIMENSION,
|
||||
similarity_fn="euclidean",
|
||||
)
|
||||
create_fulltext_index(
|
||||
driver, FULLTEXT_INDEX_NAME, label="Document", node_properties=["vectorProperty"]
|
||||
)
|
||||
|
||||
# Initialize the retriever
|
||||
retriever = HybridRetriever(driver, INDEX_NAME, FULLTEXT_INDEX_NAME, embedder)
|
||||
|
||||
# Upsert the query
|
||||
vector = [random() for _ in range(DIMENSION)]
|
||||
insert_query = (
|
||||
"MERGE (n:Document {id: $id})"
|
||||
"WITH n "
|
||||
"CALL db.create.setNodeVectorProperty(n, 'vectorProperty', $vector)"
|
||||
"RETURN n"
|
||||
)
|
||||
parameters = {
|
||||
"id": 0,
|
||||
"vector": vector,
|
||||
}
|
||||
driver.execute_query(insert_query, parameters)
|
||||
|
||||
# Perform the similarity search for a text query
|
||||
query_text = "Find me a book about Fremen"
|
||||
print(retriever.search(query_text=query_text, top_k=5))
|
||||
Reference in New Issue
Block a user