///
import type { ReadStream } from "fs";
import ApiCall from "./ApiCall";
import Configuration from "./Configuration";
import { SearchOnlyDocuments } from "./SearchOnlyDocuments";
export interface DeleteQuery {
filter_by: string;
batch_size?: number;
}
export interface DeleteResponse {
num_deleted: number;
}
interface ImportResponseSuccess {
success: true;
}
export interface ImportResponseFail {
success: false;
error: string;
document: DocumentSchema;
code: number;
}
export type ImportResponse = ImportResponseSuccess | ImportResponseFail;
export type DocumentSchema = Record;
export interface SearchParamsWithPreset extends Partial {
preset: string;
}
type OperationMode = "off" | "always" | "fallback";
export interface SearchParams {
q: string;
query_by: string | string[];
query_by_weights?: string | number[];
prefix?: string | boolean | boolean[];
filter_by?: string;
sort_by?: string | string[];
facet_by?: string | string[];
max_facet_values?: number;
facet_query?: string;
facet_query_num_typos?: number;
page?: number;
per_page?: number;
group_by?: string | string[];
group_limit?: number;
include_fields?: string | string[];
exclude_fields?: string | string[];
highlight_fields?: string | string[];
highlight_full_fields?: string | string[];
highlight_affix_num_tokens?: number;
highlight_start_tag?: string;
highlight_end_tag?: string;
snippet_threshold?: number;
num_typos?: string | number | number[];
min_len_1typo?: number;
min_len_2typo?: number;
split_join_tokens?: OperationMode;
exhaustive_search?: boolean;
drop_tokens_threshold?: number;
typo_tokens_threshold?: number;
pinned_hits?: string | string[];
hidden_hits?: string | string[];
limit_hits?: number;
pre_segmented_query?: boolean;
enable_overrides?: boolean;
prioritize_exact_match?: boolean;
prioritize_token_position?: boolean;
search_cutoff_ms?: number;
use_cache?: boolean;
max_candidates?: number;
infix?: OperationMode | OperationMode[];
preset?: string;
text_match_type?: "max_score" | "max_weight";
vector_query?: string;
"x-kumosearch-api-key"?: string;
"x-kumosearch-user-id"?: string;
offset?: number;
limit?: number;
}
type SearchResponseHighlightObject = {
matched_tokens?: string[];
snippet?: string;
value?: string;
};
export type SearchResponseHighlight = T extends string | number ? SearchResponseHighlightObject : {
[TAttribute in keyof T]?: SearchResponseHighlight;
};
export interface SearchResponseHit {
curated?: true;
highlights?: [
{
field: keyof T;
snippet?: string;
value?: string;
snippets?: string[];
indices?: number[];
matched_tokens: string[][] | string[];
}
];
highlight: SearchResponseHighlight;
document: T;
text_match: number;
text_match_info?: {
best_field_score: string;
best_field_weight: number;
fields_matched: number;
score: string;
tokens_matched: number;
};
}
export interface SearchResponseFacetCountSchema {
counts: {
count: number;
highlighted: string;
value: string;
}[];
field_name: keyof T;
stats: {
avg?: number;
max?: number;
min?: number;
sum?: number;
};
}
export interface SearchResponseRequestParams extends Partial {
collection_name?: string;
}
export interface SearchResponse {
facet_counts?: SearchResponseFacetCountSchema[];
found: number;
found_docs?: number;
out_of: number;
page: number;
request_params: SearchResponseRequestParams;
search_time_ms: number;
hits?: SearchResponseHit[];
grouped_hits?: {
group_key: string[];
hits: SearchResponseHit[];
found?: number;
}[];
}
export interface DocumentWriteParameters {
dirty_values?: "coerce_or_reject" | "coerce_or_drop" | "drop" | "reject";
action?: "create" | "update" | "upsert" | "emplace";
}
export interface UpdateByFilterParameters {
filter_by?: string;
}
export interface UpdateByFilterResponse {
num_updated: number;
}
export interface DocumentImportParameters extends DocumentWriteParameters {
batch_size?: number;
return_doc?: boolean;
return_id?: boolean;
}
export interface DocumentsExportParameters {
filter_by?: string;
include_fields?: string;
exclude_fields?: string;
}
export interface SearchableDocuments {
search(searchParameters: SearchParams | SearchParamsWithPreset, options: SearchOptions): Promise>;
clearCache(): void;
}
export interface WriteableDocuments {
create(document: T, options: DocumentWriteParameters): Promise;
upsert(document: T, options: DocumentWriteParameters): Promise;
update(document: T, options: DocumentWriteParameters): Promise;
delete(idOrQuery: string | DeleteQuery): Promise | Promise;
import(documents: T[] | string, options: DocumentWriteParameters): Promise;
export(options: DocumentsExportParameters): Promise;
}
export interface SearchOptions {
cacheSearchResultsForSeconds?: number;
abortSignal?: AbortSignal | null;
}
export default class Documents extends SearchOnlyDocuments implements WriteableDocuments {
constructor(collectionName: string, apiCall: ApiCall, configuration: Configuration);
create(document: T, options?: DocumentWriteParameters): Promise;
upsert(document: T, options?: DocumentWriteParameters): Promise;
update(document: T, options: UpdateByFilterParameters): Promise;
update(document: T, options: DocumentWriteParameters): Promise;
delete(idOrQuery: DeleteQuery): Promise;
delete(idOrQuery: string): Promise;
createMany(documents: T[], options?: DocumentImportParameters): Promise;
/**
* Import a set of documents in a batch.
* @param {string|Array} documents - Can be a JSONL string of documents or an array of document objects.
* @param options
* @return {string|Array} Returns a JSONL string if the input was a JSONL string, otherwise it returns an array of results.
*/
import(documents: string, options?: DocumentImportParameters): Promise;
import(documents: T[], options?: DocumentImportParameters): Promise;
/**
* Returns a JSONL string for all the documents in this collection
*/
export(options?: DocumentsExportParameters): Promise;
/**
* Returns a NodeJS readable stream of JSONL for all the documents in this collection.
*/
exportStream(options?: DocumentsExportParameters): Promise;
}
export {};