import type { GeoPoint } from '../lib/geo'; import type { SearchableField } from './schema'; import { SchemaService } from './schema'; export declare type AnalyzerIdKeyword = 'keyword'; export declare type AnalyzerIdPattern = 'pattern'; export declare type AnalyzerIdSimple = 'simple'; export declare type AnalyzerIdStandard = 'standard' | 'standard.lucene'; export declare type AnalyzerIdStandardAsciiFoldingLucene = 'standardasciifolding.lucene'; export declare type AnalyzerIdStop = 'stop'; export declare type AnalyzerIdWhitespace = 'whitespace'; export declare type AnalyzerId = AnalyzerIdKeyword | AnalyzerIdPattern | AnalyzerIdSimple | AnalyzerIdStandard | AnalyzerIdStandardAsciiFoldingLucene | AnalyzerIdStop | AnalyzerIdWhitespace | string; export interface NGram { value: string; index: number; rindex: number; } export interface AnalyzedValueFullText { kind: 'fullText'; values: unknown[]; normalized: string[]; entries: NGram[][]; length: number; } export interface AnalyzedValueGeo { kind: 'geo'; values: unknown[]; points: GeoPoint[]; } export declare type AnalyzedValue = AnalyzedValueFullText | AnalyzedValueGeo; export declare type AnalyzedDocument = Partial>; export declare function createTokenizer(options?: { splitter?: RegExp; normalizer?: (value: string) => string; filter?: (value: string) => boolean; }): (value: string) => NGram[]; export declare type AnalyzerFn = (value: string) => NGram[]; export declare function score(entry: NGram[], match: NGram[]): number; export interface SimpleMatch { ngrams: NGram[]; score: number; } export declare type SimpleMatches = SimpleMatch[]; export declare type MatchMode = 'equals' | 'startsWith'; export declare type TermAnalyzisResult = { query: NGram[]; apply: (entry: NGram[], matchMode: MatchMode) => SimpleMatches; }; export declare type QueryAnalyzisResult = { query: NGram[]; apply: (entry: NGram[]) => SimpleMatches; }; export declare type SimpleSearchMode = 'any' | 'all'; export declare type PlainAnalysisMode = 'oneTerm' | 'twoTerms' | 'oneTermWithContext'; export declare type QueryingStrategy = (field: SearchableField) => QueryAnalyzisResult; export declare function createSimpleQueryStrategy(options: { search: string; searchMode: SimpleSearchMode; }): QueryingStrategy; export declare function createPlainQueryStrategy(options: { search: string; analysisMode: PlainAnalysisMode; }): QueryingStrategy; export declare class AnalyzerService { private readonly schemaService; constructor(schemaService: SchemaService); analyzeDocument(document: T): AnalyzedDocument; }