**feat: add findSimilar method for entity similarity search**
### Changes: - Introduced a `findSimilar` method in `src/brainyData.ts`: - Enables searching for entities similar to a given entity ID. - Supports options such as result limit, noun type filtering, verb inclusion, and search mode (local, remote, or combined). - Filters out the original entity in results and returns limited output based on the specified options. - Updated `brainyDataInterface` in `src/types/brainyDataInterface.ts` to include the new `findSimilar` method definition. ### Purpose: Added the `findSimilar` method to enhance entity retrieval capabilities by enabling similarity-based searches. This feature improves data exploration and provides a flexible API for building advanced search and recommendation functionalities.
This commit is contained in:
parent
e8ac0cab06
commit
c13e124c71
2 changed files with 46 additions and 0 deletions
|
|
@ -755,6 +755,44 @@ export class BrainyData<T = any> implements BrainyDataInterface<T> {
|
||||||
return searchResults
|
return searchResults
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find entities similar to a given entity ID
|
||||||
|
* @param id ID of the entity to find similar entities for
|
||||||
|
* @param options Additional options
|
||||||
|
* @returns Array of search results with similarity scores
|
||||||
|
*/
|
||||||
|
public async findSimilar(
|
||||||
|
id: string,
|
||||||
|
options: {
|
||||||
|
limit?: number // Number of results to return
|
||||||
|
nounTypes?: string[] // Optional array of noun types to search within
|
||||||
|
includeVerbs?: boolean // Whether to include associated GraphVerbs in the results
|
||||||
|
searchMode?: 'local' | 'remote' | 'combined' // Where to search: local, remote, or both
|
||||||
|
} = {}
|
||||||
|
): Promise<SearchResult<T>[]> {
|
||||||
|
await this.ensureInitialized()
|
||||||
|
|
||||||
|
// Get the entity by ID
|
||||||
|
const entity = await this.get(id)
|
||||||
|
if (!entity) {
|
||||||
|
throw new Error(`Entity with ID ${id} not found`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the entity's vector to search for similar entities
|
||||||
|
const k = (options.limit || 10) + 1 // Add 1 to account for the original entity
|
||||||
|
const searchResults = await this.search(entity.vector, k, {
|
||||||
|
forceEmbed: false,
|
||||||
|
nounTypes: options.nounTypes,
|
||||||
|
includeVerbs: options.includeVerbs,
|
||||||
|
searchMode: options.searchMode
|
||||||
|
})
|
||||||
|
|
||||||
|
// Filter out the original entity and limit to the requested number
|
||||||
|
return searchResults
|
||||||
|
.filter(result => result.id !== id)
|
||||||
|
.slice(0, options.limit || 10)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a vector by ID
|
* Get a vector by ID
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -44,4 +44,12 @@ export interface BrainyDataInterface<T = unknown> {
|
||||||
* @returns The ID of the created relationship
|
* @returns The ID of the created relationship
|
||||||
*/
|
*/
|
||||||
relate(sourceId: string, targetId: string, relationType: string, metadata?: unknown): Promise<string>
|
relate(sourceId: string, targetId: string, relationType: string, metadata?: unknown): Promise<string>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find entities similar to a given entity ID
|
||||||
|
* @param id ID of the entity to find similar entities for
|
||||||
|
* @param options Additional options
|
||||||
|
* @returns Array of search results with similarity scores
|
||||||
|
*/
|
||||||
|
findSimilar(id: string, options?: { limit?: number }): Promise<unknown[]>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue