/**
 * 검색 결과의 관련성을 정량적으로 평가하여 사용자에게 가장 유용한 결과를 우선 제공합니다.
 * Memento-Goals.md에 정의된 검증된 랭킹 공식을 구현하여 일관되고 신뢰할 수 있는 검색 품질을 보장합니다.
 *
 * 가중치는 ranking-weights.toml 설정 파일에서 로드하며, 파일이 없으면 constants.ts의 기본값을 사용합니다.
 */
export interface SearchFeatures {
    relevance: number;
    recency: number;
    importance: number;
    usage: number;
    duplication_penalty: number;
    consolidation_score?: number;
    relation_weight?: number;
    workflow_name_match?: boolean;
    skill_name_match?: boolean;
    trigger_conditions_match?: boolean;
    process_attribute_fit?: number;
    /** 시그모이드 정규화된 피드백 점수 [0,1], 미제공 시 랭킹에서 0.5(중립)로 처리 */
    feedback_score?: number;
}
export interface EmbeddingSimilarity {
    queryEmbedding: number[];
    docEmbedding: number[];
}
export interface BM25Result {
    score: number;
    normalizedScore: number;
}
export interface UsageMetrics {
    viewCount: number;
    citeCount: number;
    editCount: number;
    lastAccessed?: Date | undefined;
}
export interface RelevanceInput {
    query: string;
    content: string;
    title?: string;
    tags: string[];
    embeddingSimilarity?: EmbeddingSimilarity | undefined;
    bm25Result?: BM25Result | undefined;
}
import type { ScoreBreakdown } from '../../../shared/types/search.types.js';
export interface SearchRankingWeights {
    relevance: number;
    recency: number;
    importance: number;
    usage: number;
    relation_weight: number;
    duplication_penalty: number;
    consolidation_score?: number;
    process_attribute_fit?: number;
    zeta_fb?: number;
}
/**
 * 사용자의 검색 목적에 따라 다른 가중치를 적용하여 맞춤형 검색 결과를 제공합니다.
 */
export type SearchProfile = 'recent' | 'balanced' | 'memory';
/**
 * 벡터 유사도와 통합 점수의 균형을 조절하여 검색 정확도를 최적화합니다.
 */
export interface ConsolidationScoreWeights {
    vectorSimilarity: number;
    consolidationScore: number;
}
export declare class SearchRanking {
    private readonly weights;
    constructor(weights?: Partial<SearchRankingWeights>);
    /**
     * Procedural Memory 특화 가중치를 계산합니다.
     * workflow_name 매칭 시 +0.1, skill_name 매칭 시 +0.1, trigger_conditions 매칭 시 +0.15의 부스트를 제공합니다.
     *
     * @param features 검색 특징 객체
     * @returns Procedural Memory 부스트 점수 (0.0 ~ 0.35)
     */
    calculateProceduralMemoryBoost(features: SearchFeatures): number;
    /**
     * 단일 지표만으로는 검색 결과의 품질을 정확히 평가할 수 없으므로, 여러 지표를 가중 평균하여 종합적인 평가를 수행합니다.
     * 관련성, 최근성, 중요도, 사용성, 관계 가중치를 결합하고 중복 패널티를 적용하여 사용자에게 가장 유용한 결과를 우선 제공합니다.
     *
     * Consolidation Score가 제공되면 벡터 유사도(relevance)를 보완하는 추가 신호로 활용합니다.
     * 다른 신호들(recency, importance, usage, duplication_penalty)은 그대로 유지하여 다차원 랭킹을 보장합니다.
     *
     * Procedural Memory 특화 가중치가 제공되면 최종 점수에 부스트를 추가합니다.
     */
    calculateFinalScore(features: SearchFeatures): number;
    /**
     * 최종 점수와 (옵션) 점수 구성 요소. breakdown은 include_score_breakdown 경로에서만 계산.
     *
     * FR-008 6슬롯 고정: `breakdown.relevance`의 score·pct는 순수 α·relevance(블렌딩 후)만이 아니라,
     * 동일 슬롯에 ζ·relation_weight·procedural_boost·process_attribute_fit 기여까지 합산한다
     * (`ScoreBreakdown.relevance`, `contracts/mcp-tools.md` §1 `relevance` 슬롯).
     */
    calculateFinalScoreAndBreakdown(features: SearchFeatures, options?: {
        includeBreakdown?: boolean;
    }): {
        score: number;
        breakdown?: ScoreBreakdown;
    };
    /**
     * 사용자의 검색 목적에 맞는 가중치를 제공하여 최적의 검색 결과를 제공합니다.
     * 최근 정보를 우선하는 경우, 균형잡힌 검색, 장기 기억 중심 검색 등 다양한 시나리오를 지원합니다.
     */
    getConsolidationScoreWeights(profile?: SearchProfile): ConsolidationScoreWeights;
    /**
     * 벡터 유사도와 통합 점수를 프로파일에 맞게 결합하여 최종 검색 점수를 계산합니다.
     * 사용자의 검색 목적에 따라 다른 가중치를 적용하여 맞춤형 검색 결과를 제공합니다.
     */
    calculateFinalScoreWithConsolidation(vectorSimilarity: number, consolidationScore: number, profile?: SearchProfile): number;
    /**
     * 단일 지표만으로는 검색 관련성을 정확히 평가할 수 없으므로, 다양한 관련성 지표를 가중 평균하여 종합적인 관련성 점수를 계산합니다.
     * 임베딩 유사도, BM25, 태그 매칭, 타이틀 히트를 결합하여 검색 정확도를 향상시킵니다.
     */
    calculateRelevance(input: RelevanceInput): number;
    /**
     * 벡터 공간에서의 의미적 유사성을 정량화하여 검색 정확도를 향상시킵니다.
     * 코사인 유사도를 사용하여 벡터의 방향성을 비교하고 크기 차이의 영향을 제거합니다.
     */
    private calculateEmbeddingSimilarity;
    /**
     * BM25 점수를 0-1 범위로 정규화하여 다른 점수 지표와 일관된 비교가 가능하도록 합니다.
     */
    private normalizeBM25;
    /**
     * 외부 BM25 라이브러리가 없는 경우에도 기본적인 키워드 빈도 기반 검색을 제공합니다.
     * 간소화된 BM25 알고리즘을 구현하여 검색 기능의 안정성을 보장합니다.
     */
    private calculateSimpleBM25;
    /**
     * 검색어와 태그 간의 집합 유사도를 계산하여 메타데이터 기반 관련성을 평가합니다.
     * 자카드 유사도를 사용하여 교집합과 합집합의 비율로 관련성을 정량화합니다.
     */
    private calculateTagMatch;
    /**
     * 문서 제목이 검색어와 일치하는 정도를 평가하여 정확한 매칭을 우선 제공합니다.
     * 제목은 문서의 핵심 내용을 요약하므로 높은 관련성 지표로 활용합니다.
     */
    private calculateTitleHit;
    /**
     * 연속된 문자 시퀀스의 일치 여부를 확인하여 부분 문자열 매칭을 지원합니다.
     * 오타나 변형된 검색어에 대해서도 관련 결과를 찾을 수 있도록 합니다.
     */
    private hasNgramMatch;
    /**
     * 텍스트를 연속된 N개의 문자로 분할하여 부분 문자열 매칭을 수행합니다.
     * 다양한 길이의 N-gram을 생성하여 유연한 패턴 매칭을 지원합니다.
     */
    private generateNgrams;
    /**
     * 두 벡터의 내적을 계산하여 방향성 유사성을 측정합니다.
     * 코사인 유사도 계산의 기초가 되는 연산을 수행합니다.
     */
    private dotProduct;
    /**
     * 벡터의 유클리드 노름을 계산하여 코사인 유사도 계산에 필요한 벡터 크기를 구합니다.
     */
    private magnitude;
    /**
     * 시간에 따른 기억의 자연스러운 감쇠를 반영하여 최신 정보를 우선 제공합니다.
     * 반감기 기반 지수 감쇠를 사용하여 시간이 지날수록 점수가 감소하도록 설계했습니다.
     */
    calculateRecency(createdAt: Date, type: string): number;
    /**
     * 사용자가 명시적으로 설정한 중요도와 고정 여부를 반영하여 우선순위를 결정합니다.
     * 메모리 타입에 따른 기본 중요도를 적용하여 일관된 점수 체계를 유지합니다.
     */
    calculateImportance(userImportance: number, isPinned: boolean, type: string): number;
    /**
     * 실제 사용 빈도를 반영하여 자주 참조되는 기억을 우선 제공합니다.
     * 로그 스케일을 사용하여 과도한 사용 빈도가 점수를 지배하지 않도록 균형을 맞춥니다.
     * 인용과 편집에 다른 가중치를 부여하여 사용 패턴의 차이를 반영합니다.
     */
    calculateUsage(metrics: UsageMetrics, batchMin?: number, batchMax?: number): number;
    /**
     * 여러 메모리의 사용성을 일괄 계산하여 상대적 비교가 가능하도록 합니다.
     * 배치 단위 정규화를 통해 더 정확한 사용성 평가를 수행합니다.
     */
    calculateBatchUsage(metricsList: UsageMetrics[]): {
        normalized: number[];
        min: number;
        max: number;
    };
    /**
     * 값을 0-1 범위로 정규화하여 다른 점수 지표와 일관된 비교가 가능하도록 합니다.
     * 최소/최대값이 같은 경우를 처리하여 안정적인 점수 계산을 보장합니다.
     */
    private normalize;
    /**
     * 유사한 내용의 중복 결과를 제거하여 검색 결과의 다양성을 확보합니다.
     * MMR(Maximal Marginal Relevance) 알고리즘을 구현하여 관련성과 다양성의 균형을 맞춥니다.
     */
    calculateDuplicationPenalty(candidateContent: string, selectedContents: string[]): number;
    /**
     * 두 텍스트 간의 집합 유사도를 계산하여 중복 여부를 판단합니다.
     * 자카드 유사도를 사용하여 단어 집합의 교집합과 합집합 비율로 유사성을 정량화합니다.
     */
    private calculateTextSimilarity;
    /**
     * 관계 그래프의 신뢰도와 관계 유형을 종합하여 관련성 점수에 반영합니다.
     * 여러 관계의 confidence와 type_boost를 정규화하여 일관된 가중치를 계산합니다.
     * 관계의 개수와 유형에 따라 다른 가중치를 적용하여 정확한 관련성 평가를 수행합니다.
     */
    calculateRelationWeight(relations: Array<{
        confidence: number;
        relation_type: string;
    }>, maxRelations?: number): number;
    /**
     * 기존 API와의 호환성을 유지하면서 간단한 관련성 계산을 제공합니다.
     * 임베딩이나 BM25가 없는 경우에도 기본적인 텍스트 매칭을 수행합니다.
     */
    calculateRelevanceSimple(query: string, content: string, tags?: string[]): number;
    /**
     * 기존 API와의 호환성을 유지하면서 간단한 사용성 계산을 제공합니다.
     * 마지막 접근 시간만을 사용하여 사용 빈도 데이터가 없는 경우에도 평가가 가능하도록 합니다.
     */
    calculateUsageSimple(lastAccessed?: Date): number;
    /**
     * 메모리의 생성 시간으로부터 경과된 일수를 계산하여 최근성 평가에 사용합니다.
     */
    private getAgeInDays;
    /**
     * 메모리 타입에 따라 다른 반감기를 설정하여 타입별 특성에 맞는 감쇠 속도를 적용합니다.
     * working 메모리는 빠르게, semantic 메모리는 천천히 감쇠하도록 설계했습니다.
     */
    private getHalfLife;
    /**
     * 메모리 타입에 따라 기본 중요도를 조정하여 타입별 특성을 반영합니다.
     * semantic 메모리는 높은 중요도를, working 메모리는 낮은 중요도를 부여합니다.
     */
    private getTypeBoost;
}
//# sourceMappingURL=search-ranking.d.ts.map