-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Add neo4j vector index docs * Run build, fix docs --------- Co-authored-by: jacoblee93 <[email protected]>
- Loading branch information
1 parent
70774b7
commit 86f8a2b
Showing
10 changed files
with
206 additions
and
0 deletions.
There are no files selected for viewing
52 changes: 52 additions & 0 deletions
52
docs/extras/modules/data_connection/vectorstores/integrations/neo4jvector.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# Neo4j Vector Index | ||
|
||
Neo4j is an open-source graph database with integrated support for vector similarity search. | ||
It supports: | ||
|
||
- approximate nearest neighbor search | ||
- Euclidean similarity and cosine similarity | ||
- Hybrid search combining vector and keyword searches | ||
|
||
## Setup | ||
|
||
To work with Neo4j Vector Index, you need to install the `neo4j-driver` package: | ||
|
||
```bash npm2yarn | ||
npm install neo4j-driver | ||
``` | ||
|
||
### Setup a `Neo4j` self hosted instance with `docker-compose` | ||
|
||
`Neo4j` provides a prebuilt Docker image that can be used to quickly setup a self-hosted Neo4j database instance. | ||
Create a file below named `docker-compose.yml`: | ||
|
||
import CodeBlock from "@theme/CodeBlock"; | ||
import DockerExample from "@examples/indexes/vector_stores/neo4j_vector/docker-compose.example.yml"; | ||
|
||
<CodeBlock language="yml" name="docker-compose.yml"> | ||
{DockerExample} | ||
</CodeBlock> | ||
|
||
And then in the same directory, run `docker compose up` to start the container. | ||
|
||
You can find more information on how to setup `Neo4j` on their [website](https://neo4j.com/docs/operations-manual/current/installation/). | ||
|
||
## Usage | ||
|
||
import Example from "@examples/indexes/vector_stores/neo4j_vector/neo4j_vector.ts"; | ||
|
||
One complete example of using `Neo4jVectorStore` is the following: | ||
|
||
<CodeBlock language="typescript">{Example}</CodeBlock> | ||
|
||
### Use retrievalQuery parameter to customize responses | ||
|
||
import RetrievalExample from "@examples/indexes/vector_stores/neo4j_vector/neo4j_vector_retrieval.ts"; | ||
|
||
<CodeBlock language="typescript">{RetrievalExample}</CodeBlock> | ||
|
||
### Instantiate Neo4jVectorStore from existing graph | ||
|
||
import ExistingGraphExample from "@examples/indexes/vector_stores/neo4j_vector/neo4j_vector_existinggraph.ts"; | ||
|
||
<CodeBlock language="typescript">{ExistingGraphExample}</CodeBlock> |
8 changes: 8 additions & 0 deletions
8
examples/src/indexes/vector_stores/neo4j_vector/docker-compose.example.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
services: | ||
database: | ||
image: neo4j | ||
ports: | ||
- 7687:7687 | ||
- 7474:7474 | ||
environment: | ||
- NEO4J_AUTH=neo4j/pleaseletmein |
36 changes: 36 additions & 0 deletions
36
examples/src/indexes/vector_stores/neo4j_vector/neo4j_vector.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
import { OpenAIEmbeddings } from "langchain/embeddings/openai"; | ||
import { Neo4jVectorStore } from "langchain/vectorstores/neo4j_vector"; | ||
|
||
// Configuration object for Neo4j connection and other related settings | ||
const config = { | ||
url: "bolt://localhost:7687", // URL for the Neo4j instance | ||
username: "neo4j", // Username for Neo4j authentication | ||
password: "pleaseletmein", // Password for Neo4j authentication | ||
indexName: "vector", // Name of the vector index | ||
keywordIndexName: "keyword", // Name of the keyword index if using hybrid search | ||
searchType: "vector", // Type of search (e.g., vector, hybrid) | ||
nodeLabel: "Chunk", // Label for the nodes in the graph | ||
textNodeProperty: "text", // Property of the node containing text | ||
embeddingNodeProperty: "embedding", // Property of the node containing embedding | ||
}; | ||
|
||
const documents = [ | ||
{ pageContent: "what's this", metadata: { a: 2 } }, | ||
{ pageContent: "Cat drinks milk", metadata: { a: 1 } }, | ||
]; | ||
|
||
const neo4jVectorIndex = await Neo4jVectorStore.fromDocuments( | ||
documents, | ||
new OpenAIEmbeddings(), | ||
config | ||
); | ||
|
||
const results = await neo4jVectorIndex.similaritySearch("water", 1); | ||
|
||
console.log(results); | ||
|
||
/* | ||
[ Document { pageContent: 'Cat drinks milk', metadata: { a: 1 } } ] | ||
*/ | ||
|
||
await neo4jVectorIndex.close(); |
35 changes: 35 additions & 0 deletions
35
examples/src/indexes/vector_stores/neo4j_vector/neo4j_vector_existinggraph.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
import { OpenAIEmbeddings } from "langchain/embeddings/openai"; | ||
import { Neo4jVectorStore } from "langchain/vectorstores/neo4j_vector"; | ||
|
||
/** | ||
* `fromExistingGraph` Method: | ||
* | ||
* Description: | ||
* This method initializes a `Neo4jVectorStore` instance using an existing graph in the Neo4j database. | ||
* It's designed to work with nodes that already have textual properties but might not have embeddings. | ||
* The method will compute and store embeddings for nodes that lack them. | ||
* | ||
* Note: | ||
* This method is particularly useful when you have a pre-existing graph with textual data and you want | ||
* to enhance it with vector embeddings for similarity searches without altering the original data structure. | ||
*/ | ||
|
||
// Configuration object for Neo4j connection and other related settings | ||
const config = { | ||
url: "bolt://localhost:7687", // URL for the Neo4j instance | ||
username: "neo4j", // Username for Neo4j authentication | ||
password: "pleaseletmein", // Password for Neo4j authentication | ||
indexName: "wikipedia", | ||
nodeLabel: "Wikipedia", | ||
textNodeProperties: ["title", "description"], | ||
embeddingNodeProperty: "embedding", | ||
searchType: "hybrid", | ||
}; | ||
|
||
// You should have a populated Neo4j database to use this method | ||
const neo4jVectorIndex = await Neo4jVectorStore.fromExistingGraph( | ||
new OpenAIEmbeddings(), | ||
config | ||
); | ||
|
||
await neo4jVectorIndex.close(); |
59 changes: 59 additions & 0 deletions
59
examples/src/indexes/vector_stores/neo4j_vector/neo4j_vector_retrieval.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
import { OpenAIEmbeddings } from "langchain/embeddings/openai"; | ||
import { Neo4jVectorStore } from "langchain/vectorstores/neo4j_vector"; | ||
|
||
/* | ||
* The retrievalQuery is a customizable Cypher query fragment used in the Neo4jVectorStore class to define how | ||
* search results should be retrieved and presented from the Neo4j database. It allows developers to specify | ||
* the format and structure of the data returned after a similarity search. | ||
* Mandatory columns for `retrievalQuery`: | ||
* | ||
* 1. text: | ||
* - Description: Represents the textual content of the node. | ||
* - Type: String | ||
* | ||
* 2. score: | ||
* - Description: Represents the similarity score of the node in relation to the search query. A | ||
* higher score indicates a closer match. | ||
* - Type: Float (ranging between 0 and 1, where 1 is a perfect match) | ||
* | ||
* 3. metadata: | ||
* - Description: Contains additional properties and information about the node. This can include | ||
* any other attributes of the node that might be relevant to the application. | ||
* - Type: Object (key-value pairs) | ||
* - Example: { "id": "12345", "category": "Books", "author": "John Doe" } | ||
* | ||
* Note: While you can customize the `retrievalQuery` to fetch additional columns or perform | ||
* transformations, never omit the mandatory columns. The names of these columns (`text`, `score`, | ||
* and `metadata`) should remain consistent. Renaming them might lead to errors or unexpected behavior. | ||
*/ | ||
|
||
// Configuration object for Neo4j connection and other related settings | ||
const config = { | ||
url: "bolt://localhost:7687", // URL for the Neo4j instance | ||
username: "neo4j", // Username for Neo4j authentication | ||
password: "pleaseletmein", // Password for Neo4j authentication | ||
retrievalQuery: ` | ||
RETURN node.text AS text, score, {a: node.a * 2} AS metadata | ||
`, | ||
}; | ||
|
||
const documents = [ | ||
{ pageContent: "what's this", metadata: { a: 2 } }, | ||
{ pageContent: "Cat drinks milk", metadata: { a: 1 } }, | ||
]; | ||
|
||
const neo4jVectorIndex = await Neo4jVectorStore.fromDocuments( | ||
documents, | ||
new OpenAIEmbeddings(), | ||
config | ||
); | ||
|
||
const results = await neo4jVectorIndex.similaritySearch("water", 1); | ||
|
||
console.log(results); | ||
|
||
/* | ||
[ Document { pageContent: 'Cat drinks milk', metadata: { a: 2 } } ] | ||
*/ | ||
|
||
await neo4jVectorIndex.close(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters