Metadata Filtering Strategies

Content: Metadata Filtering Strategies

User Intent

"How do I filter content by metadata? What filters are available?"

Operation

  • SDK Method: queryContents() with filter parameter

  • GraphQL: queryContents query with ContentFilter

  • Entity Type: Content

  • Common Use Cases: Filtered search, date range queries, type filtering, collection filtering, entity-based queries

Metadata Filtering Overview

Graphlit provides powerful metadata filtering to narrow search results based on indexed properties. Filters can be combined with search queries or used alone.

TypeScript (Canonical)

import { Graphlit } from 'graphlit-client';
import { ContentTypes, EntityState, FileTypes, ObservableTypes, SearchTypes } from 'graphlit-client/dist/generated/graphql-types';

const graphlit = new Graphlit();

// Basic metadata filtering (no search query)
const filtered = await graphlit.queryContents({
  filter: {
    types: [ContentTypes.Email],
    creationDateRange: {
      from: '2024-01-01T00:00:00Z',
      to: '2024-12-31T23:59:59Z'
    }
  }
});

// Combine search with filters
const searchAndFilter = await graphlit.queryContents({
  search: "machine learning",
  filter: {
    types: [ContentTypes.File],
    fileTypes: [FileTypes.Document],
    collections: [{ id: 'research-papers' }]
  }
});

// Complex filter with multiple criteria
const complex = await graphlit.queryContents({
  filter: {
    types: [ContentTypes.Email, ContentTypes.Message],
    creationDateRange: { from: '2024-01-01' },
    feeds: [{ id: 'slack-feed-id' }, { id: 'gmail-feed-id' }],
    collections: [{ id: 'team-docs' }],
    states: [EntityState.Enabled]
  }
});

console.log(`Found ${complex.contents.results.length} results`);

Available Filters

1. Content Type Filter

2. File Type Filter

3. Date Range Filters

4. Collection Filter

5. Feed Filter

6. Workflow Filter

7. State Filter

8. File Size Filter

9. MIME Type Filter

10. File Extension Filter

11. Entity Filter (Observations)

12. Similarity Filter

Boolean Logic (OR / AND)

OR Logic Within Filter

AND Logic Across Filters

Complex OR/AND (Advanced)

Performance Considerations

Fast Filters (Indexed)

Slower Filters (Requires Graph Query)

Metadata filtering (snake_case)

filtered = await graphlit.queryContents( filter=ContentFilterInput( types=[ContentTypes.Email], creation_date_range=DateRangeInput( from_=datetime(2024, 1, 1).isoformat() ), feeds=[EntityReferenceInput(id='feed-id')] ) )

Complex filter

complex = await graphlit.queryContents( filter=ContentFilterInput( types=[ContentTypes.File], file_types=[FileTypes.Document], file_size_range=Int64RangeInput( from_=10000000 # 10MB ), collections=[EntityReferenceInput(id='collection-id')] ) )

Developer Hints

Combine Filters for Precision

ISO 8601 Duration Format

Empty Array vs Null

Variations

1. Filter by Type and Date

2. Filter by Multiple Collections

3. Large Documents Only

4. Recent Content from Specific Feed

5. Content with Entities

6. PDFs in Collection

7. Search + Complex Filter

Common Issues & Solutions

Issue: No results with multiple filters Solution: Check if filters are too restrictive

Issue: Date filter not working Solution: Use correct ISO 8601 format

Issue: Want content from Feed A OR Feed B Solution: Multiple feeds in array = OR

Production Example

Last updated

Was this helpful?