NIP-50
Search - extends the Nostr filter with a search field for full-text search on relays that support it. Includes query modifier parsing for advanced search features.
Import
ts
import { nip50 } from 'nostr-core'
// or import individual functions
import {
buildSearchFilter,
parseSearchQuery,
buildSearchQuery,
} from 'nostr-core'SearchFilter Type
ts
type SearchFilter = Filter & {
search?: string
}nip50.buildSearchFilter
ts
function buildSearchFilter(query: string, filter?: Filter): SearchFilterBuilds a search filter by adding the search field to a standard Nostr filter.
ts
const filter = nip50.buildSearchFilter('bitcoin lightning')
// { search: 'bitcoin lightning' }
const filtered = nip50.buildSearchFilter('nostr protocol', { kinds: [1], limit: 20 })
// { kinds: [1], limit: 20, search: 'nostr protocol' }nip50.parseSearchQuery
ts
function parseSearchQuery(query: string): { text: string; modifiers: Record<string, string> }Parses search modifiers (key:value) from a query string.
ts
const parsed = nip50.parseSearchQuery('bitcoin include:spam language:en')
// { text: 'bitcoin', modifiers: { include: 'spam', language: 'en' } }nip50.buildSearchQuery
ts
function buildSearchQuery(text: string, modifiers?: Record<string, string>): stringBuilds a search query string from text and modifiers.
ts
const query = nip50.buildSearchQuery('bitcoin', { language: 'en', domain: 'example.com' })
// 'bitcoin language:en domain:example.com'How It Works
- The
searchfield is added to REQ filters:["REQ", sub_id, { search: "query", ... }] - Only relays that advertise NIP-50 support will handle search filters
- Search modifiers use
key:valueformat within the search string - Common modifiers:
include:spam,domain:,language:,sentiment:,nsfw: - The search query is combined with standard filter fields (kinds, authors, etc.)
- Results are returned as standard Nostr events