Skip to main content

Module bidirectional_index

Module bidirectional_index 

Source
Expand description

Bidirectional entity-chunk index for fast lookups Bidirectional Entity-Chunk Index

This module provides efficient bidirectional lookups between entities and chunks, essential for LazyGraphRAG and E2GraphRAG query refinement and concept expansion.

§Key Features

  • Fast lookups: O(1) access in both directions
  • Many-to-many relationships: One entity can appear in multiple chunks, one chunk can contain multiple entities
  • Incremental updates: Add/remove mappings without rebuilding the entire index
  • Memory efficient: Uses IndexMap for predictable iteration order

§Use Cases

  1. Query Expansion: Given entities in a query, find all relevant chunks
  2. Context Retrieval: Given a chunk, find all related entities
  3. Concept Graph Building: Track concept co-occurrence across chunks
  4. Iterative Deepening: Expand search by traversing entity-chunk relationships

§Example

use graphrag_core::entity::bidirectional_index::BidirectionalIndex;
use graphrag_core::core::{EntityId, ChunkId};

let mut index = BidirectionalIndex::new();

let entity_id = EntityId::new("entity_1".to_string());
let chunk_id = ChunkId::new("chunk_1".to_string());

// Add mapping
index.add_mapping(&entity_id, &chunk_id);

// Query by entity
let chunks = index.get_chunks_for_entity(&entity_id);
assert_eq!(chunks.len(), 1);

// Query by chunk
let entities = index.get_entities_for_chunk(&chunk_id);
assert_eq!(entities.len(), 1);

Structs§

BidirectionalIndex
Bidirectional index for fast entity-chunk lookups
IndexStatistics
Statistics about the bidirectional index