Skip to main content
Advanced techniques for working with multiple indexes simultaneously, including bulk operations and coordinated searches across different memory contexts.

Multi-Index Operations

from gravixlayer import GravixLayer

client = GravixLayer()
memory = client.memory

# Add to multiple indexes
memory.add("User likes pizza", user_id="alice", index_name="food_preferences")
memory.add("User prefers React", user_id="alice", index_name="tech_preferences")
memory.add("Meeting at 3pm", user_id="alice", index_name="calendar_events")

# Search across specific indexes
food_results = memory.search("food", user_id="alice", index_name="food_preferences")
tech_results = memory.search("framework", user_id="alice", index_name="tech_preferences")

print(f"Food preferences: {len(food_results['results'])} results")
print(f"Tech preferences: {len(tech_results['results'])} results")

Coordinated Search Strategy

Search across multiple indexes to build comprehensive user profiles:
def get_user_profile(user_id):
    """Get comprehensive user profile from multiple indexes"""
    
    # Search different aspects of user
    work_info = memory.search("job skills experience", user_id=user_id, index_name="work_info")
    preferences = memory.search("likes dislikes settings", user_id=user_id, index_name="user_preferences")
    personal = memory.search("location age family", user_id=user_id, index_name="personal_info")
    
    profile = {
        "work": work_info['results'][:3],  # Top 3 work-related memories
        "preferences": preferences['results'][:3],
        "personal": personal['results'][:3]
    }
    
    return profile

# Usage
user_profile = get_user_profile("alice")
print(f"Work info: {len(user_profile['work'])} memories")
print(f"Preferences: {len(user_profile['preferences'])} memories")
print(f"Personal: {len(user_profile['personal'])} memories")

Bulk Operations Across Indexes

def migrate_user_data(user_id, from_index, to_index):
    """Migrate all memories from one index to another"""
    
    # Get all memories from source index
    memories = memory.get_all(user_id=user_id, index_name=from_index)
    
    # Add to destination index
    for mem in memories['results']:
        memory.add(mem['memory'], user_id=user_id, index_name=to_index, 
                  metadata=mem.get('metadata', {}))
    
    print(f"Migrated {len(memories['results'])} memories from {from_index} to {to_index}")

def cleanup_old_memories(user_id, index_name, days_old=30):
    """Remove old memories from specific index"""
    
    memories = memory.get_all(user_id=user_id, index_name=index_name)
    
    # Filter and delete old memories (implementation depends on metadata structure)
    for mem in memories['results']:
        # Delete based on your criteria
        memory.delete(mem['id'], user_id=user_id, index_name=index_name)

# Usage examples
migrate_user_data("alice", "temp_storage", "permanent_storage")
cleanup_old_memories("alice", "conversation_history", days_old=7)

Index Synchronization

Keep related data synchronized across different indexes:
def sync_user_preferences(user_id):
    """Sync user preferences across different contexts"""
    
    # Get core preferences
    core_prefs = memory.search("theme language timezone", user_id=user_id, index_name="user_preferences")
    
    # Apply to different application contexts
    for pref in core_prefs['results']:
        if "theme" in pref['memory'].lower():
            memory.add(f"UI: {pref['memory']}", user_id=user_id, index_name="ui_settings")
        elif "language" in pref['memory'].lower():
            memory.add(f"Locale: {pref['memory']}", user_id=user_id, index_name="localization")

def update_across_indexes(user_id, old_info, new_info):
    """Update information across all relevant indexes"""
    
    indexes_to_update = ["personal_info", "work_info", "user_preferences"]
    
    for index in indexes_to_update:
        # Search for old information
        results = memory.search(old_info, user_id=user_id, index_name=index)
        
        # Update if found
        for result in results['results']:
            memory.update(result['id'], new_info, user_id=user_id, index_name=index)

# Usage
sync_user_preferences("alice")
update_across_indexes("alice", "lives in NYC", "lives in San Francisco")