elasticlink 0.3.0-beta → 0.4.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -14
- package/dist/__tests__/aggregation-builder.test.d.ts +2 -0
- package/dist/__tests__/aggregation-builder.test.d.ts.map +1 -0
- package/dist/__tests__/aggregation-builder.test.js +622 -0
- package/dist/__tests__/bulk.test.d.ts +2 -0
- package/dist/__tests__/bulk.test.d.ts.map +1 -0
- package/dist/__tests__/bulk.test.js +679 -0
- package/dist/__tests__/examples.test.d.ts +2 -0
- package/dist/__tests__/examples.test.d.ts.map +1 -0
- package/dist/__tests__/examples.test.js +2123 -0
- package/dist/__tests__/fixtures/finance.d.ts +58 -0
- package/dist/__tests__/fixtures/finance.d.ts.map +1 -0
- package/dist/__tests__/fixtures/finance.js +73 -0
- package/dist/__tests__/fixtures/legal.d.ts +14 -0
- package/dist/__tests__/fixtures/legal.d.ts.map +1 -0
- package/dist/__tests__/fixtures/legal.js +27 -0
- package/dist/__tests__/fixtures/real-estate.d.ts +31 -0
- package/dist/__tests__/fixtures/real-estate.d.ts.map +1 -0
- package/dist/__tests__/fixtures/real-estate.js +39 -0
- package/dist/__tests__/index-management.test.d.ts +2 -0
- package/dist/__tests__/index-management.test.d.ts.map +1 -0
- package/dist/__tests__/index-management.test.js +1699 -0
- package/dist/__tests__/integration/aggregation.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/aggregation.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/aggregation.integration.test.js +188 -0
- package/dist/__tests__/integration/bulk.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/bulk.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/bulk.integration.test.js +90 -0
- package/dist/__tests__/integration/fixtures/finance.d.ts +37 -0
- package/dist/__tests__/integration/fixtures/finance.d.ts.map +1 -0
- package/dist/__tests__/integration/fixtures/finance.js +58 -0
- package/dist/__tests__/integration/fixtures/legal.d.ts +38 -0
- package/dist/__tests__/integration/fixtures/legal.d.ts.map +1 -0
- package/dist/__tests__/integration/fixtures/legal.js +65 -0
- package/dist/__tests__/integration/fixtures/real-estate.d.ts +17 -0
- package/dist/__tests__/integration/fixtures/real-estate.d.ts.map +1 -0
- package/dist/__tests__/integration/fixtures/real-estate.js +28 -0
- package/dist/__tests__/integration/helpers.d.ts +15 -0
- package/dist/__tests__/integration/helpers.d.ts.map +1 -0
- package/dist/__tests__/integration/helpers.js +21 -0
- package/dist/__tests__/integration/index-management.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/index-management.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/index-management.integration.test.js +67 -0
- package/dist/__tests__/integration/multi-search.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/multi-search.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/multi-search.integration.test.js +49 -0
- package/dist/__tests__/integration/query.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/query.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/query.integration.test.js +101 -0
- package/dist/__tests__/integration/suggester.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/suggester.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/suggester.integration.test.js +42 -0
- package/dist/__tests__/multi-search.test.d.ts +2 -0
- package/dist/__tests__/multi-search.test.d.ts.map +1 -0
- package/dist/__tests__/multi-search.test.js +325 -0
- package/dist/__tests__/query-builder-extensions.test.d.ts +2 -0
- package/dist/__tests__/query-builder-extensions.test.d.ts.map +1 -0
- package/dist/__tests__/query-builder-extensions.test.js +436 -0
- package/dist/__tests__/query-builder.test.d.ts +2 -0
- package/dist/__tests__/query-builder.test.d.ts.map +1 -0
- package/dist/__tests__/query-builder.test.js +5482 -0
- package/dist/__tests__/settings-presets.test.d.ts +2 -0
- package/dist/__tests__/settings-presets.test.d.ts.map +1 -0
- package/dist/__tests__/settings-presets.test.js +183 -0
- package/dist/__tests__/suggester.test.d.ts +2 -0
- package/dist/__tests__/suggester.test.d.ts.map +1 -0
- package/dist/__tests__/suggester.test.js +1006 -0
- package/dist/aggregation.builder.d.ts.map +1 -1
- package/dist/aggregation.builder.js +101 -94
- package/dist/aggregation.types.d.ts +10 -9
- package/dist/aggregation.types.d.ts.map +1 -1
- package/dist/bulk.builder.d.ts +11 -1
- package/dist/bulk.builder.d.ts.map +1 -1
- package/dist/bulk.builder.js +10 -11
- package/dist/bulk.types.d.ts.map +1 -1
- package/dist/field.helpers.d.ts +59 -4
- package/dist/field.helpers.d.ts.map +1 -1
- package/dist/field.helpers.js +87 -4
- package/dist/field.types.d.ts +78 -1
- package/dist/field.types.d.ts.map +1 -1
- package/dist/index-management.builder.d.ts +15 -3
- package/dist/index-management.builder.d.ts.map +1 -1
- package/dist/index-management.builder.js +32 -8
- package/dist/index-management.types.d.ts +27 -3
- package/dist/index-management.types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/mapping.builder.d.ts +16 -3
- package/dist/mapping.builder.d.ts.map +1 -1
- package/dist/mapping.builder.js +22 -7
- package/dist/mapping.types.d.ts +29 -6
- package/dist/mapping.types.d.ts.map +1 -1
- package/dist/multi-search.builder.d.ts +1 -1
- package/dist/multi-search.builder.d.ts.map +1 -1
- package/dist/multi-search.builder.js +5 -3
- package/dist/query.builder.d.ts +0 -4
- package/dist/query.builder.d.ts.map +1 -1
- package/dist/query.builder.js +104 -183
- package/dist/query.types.d.ts +59 -5
- package/dist/query.types.d.ts.map +1 -1
- package/dist/settings.presets.d.ts +98 -0
- package/dist/settings.presets.d.ts.map +1 -0
- package/dist/settings.presets.js +115 -0
- package/dist/suggester.builder.d.ts.map +1 -1
- package/dist/suggester.builder.js +1 -0
- package/dist/suggester.types.d.ts.map +1 -1
- package/dist/vector.types.d.ts.map +1 -1
- package/package.json +6 -3
package/dist/field.helpers.js
CHANGED
|
@@ -51,7 +51,10 @@ export const halfFloat = (options) => ({
|
|
|
51
51
|
type: 'half_float',
|
|
52
52
|
...options
|
|
53
53
|
});
|
|
54
|
-
export const scaledFloat = (options) => ({
|
|
54
|
+
export const scaledFloat = (options) => ({
|
|
55
|
+
type: 'scaled_float',
|
|
56
|
+
...options
|
|
57
|
+
});
|
|
55
58
|
// Date & boolean
|
|
56
59
|
export const date = (options) => ({
|
|
57
60
|
type: 'date',
|
|
@@ -62,6 +65,7 @@ export const boolean = (options) => ({
|
|
|
62
65
|
...options
|
|
63
66
|
});
|
|
64
67
|
// Binary
|
|
68
|
+
// eslint-disable-next-line functional/functional-parameters
|
|
65
69
|
export const binary = () => ({ type: 'binary' });
|
|
66
70
|
// IP
|
|
67
71
|
export const ip = (options) => ({
|
|
@@ -69,7 +73,46 @@ export const ip = (options) => ({
|
|
|
69
73
|
...options
|
|
70
74
|
});
|
|
71
75
|
// Vector
|
|
72
|
-
export const denseVector = (options) => ({
|
|
76
|
+
export const denseVector = (options) => ({
|
|
77
|
+
type: 'dense_vector',
|
|
78
|
+
...options
|
|
79
|
+
});
|
|
80
|
+
/**
|
|
81
|
+
* Quantized dense vector field — wraps `denseVector()` with `int8_hnsw` index type.
|
|
82
|
+
*
|
|
83
|
+
* Quantizes float32 vectors to int8 at index time, saving ~75% memory.
|
|
84
|
+
* Recommended for vectors with dims >= 384. Original float vectors are retained
|
|
85
|
+
* in the index, enabling a two-phase search pattern:
|
|
86
|
+
*
|
|
87
|
+
* 1. Fast approximate search using quantized int8 vectors
|
|
88
|
+
* 2. Precise rescore of top-k results using retained float vectors
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* // Index mapping
|
|
92
|
+
* const schema = mappings({
|
|
93
|
+
* title: text(),
|
|
94
|
+
* embedding: quantizedDenseVector({ dims: 768, similarity: 'cosine' }),
|
|
95
|
+
* }, {
|
|
96
|
+
* _source: { excludes: ['embedding'] },
|
|
97
|
+
* });
|
|
98
|
+
*
|
|
99
|
+
* // Two-phase search: fast kNN + precise rescore
|
|
100
|
+
* const result = query(schema)
|
|
101
|
+
* .knn('embedding', queryVector, { k: 100, num_candidates: 200 })
|
|
102
|
+
* .rescore(
|
|
103
|
+
* (q) => q.scriptScore(
|
|
104
|
+
* (inner) => inner.matchAll(),
|
|
105
|
+
* { source: "cosineSimilarity(params.v, 'embedding') + 1.0", params: { v: queryVector } }
|
|
106
|
+
* ),
|
|
107
|
+
* 100
|
|
108
|
+
* )
|
|
109
|
+
* .build();
|
|
110
|
+
*/
|
|
111
|
+
export const quantizedDenseVector = (options) => ({
|
|
112
|
+
type: 'dense_vector',
|
|
113
|
+
...options,
|
|
114
|
+
index_options: { type: 'int8_hnsw', ...options?.index_options }
|
|
115
|
+
});
|
|
73
116
|
// Geo
|
|
74
117
|
export const geoPoint = (options) => ({
|
|
75
118
|
type: 'geo_point',
|
|
@@ -91,7 +134,7 @@ export const nested = (fields) => ({
|
|
|
91
134
|
});
|
|
92
135
|
export const object = (fields, options) => ({
|
|
93
136
|
type: 'object',
|
|
94
|
-
...(options
|
|
137
|
+
...(options && options),
|
|
95
138
|
...(fields && { properties: fields })
|
|
96
139
|
});
|
|
97
140
|
// Alias
|
|
@@ -100,6 +143,7 @@ export const alias = (options) => ({
|
|
|
100
143
|
...options
|
|
101
144
|
});
|
|
102
145
|
// Percolator
|
|
146
|
+
// eslint-disable-next-line functional/functional-parameters
|
|
103
147
|
export const percolator = () => ({
|
|
104
148
|
type: 'percolator'
|
|
105
149
|
});
|
|
@@ -124,4 +168,43 @@ export const dateRange = (options) => ({
|
|
|
124
168
|
type: 'date_range',
|
|
125
169
|
...options
|
|
126
170
|
});
|
|
127
|
-
|
|
171
|
+
/**
|
|
172
|
+
* No-score text field — faster and uses less disk than `text()`.
|
|
173
|
+
* Use when you only need filter/match but not relevance scoring (e.g., logs, simple field matches).
|
|
174
|
+
*/
|
|
175
|
+
export const matchOnlyText = (options) => ({
|
|
176
|
+
type: 'match_only_text',
|
|
177
|
+
...options
|
|
178
|
+
});
|
|
179
|
+
/**
|
|
180
|
+
* Autocomplete / typeahead field. Creates sub-fields for edge n-gram matching
|
|
181
|
+
* out of the box. Query with `multi_match` targeting the generated sub-fields.
|
|
182
|
+
*/
|
|
183
|
+
export const searchAsYouType = (options) => ({
|
|
184
|
+
type: 'search_as_you_type',
|
|
185
|
+
...options
|
|
186
|
+
});
|
|
187
|
+
/**
|
|
188
|
+
* Field where every document has the same value. Useful for multi-index queries
|
|
189
|
+
* to identify the index type (e.g., `constantKeyword({ value: 'product' })`).
|
|
190
|
+
*/
|
|
191
|
+
export const constantKeyword = (options) => ({
|
|
192
|
+
type: 'constant_keyword',
|
|
193
|
+
...options
|
|
194
|
+
});
|
|
195
|
+
/**
|
|
196
|
+
* Optimized for grep-like wildcard/regexp queries on high-cardinality or large fields.
|
|
197
|
+
* Use instead of `keyword()` when leading wildcards (`*foo`) are needed.
|
|
198
|
+
*/
|
|
199
|
+
export const wildcardField = (options) => ({
|
|
200
|
+
type: 'wildcard',
|
|
201
|
+
...options
|
|
202
|
+
});
|
|
203
|
+
/**
|
|
204
|
+
* Flattens complex/dynamic objects into a single field. Faster than `nested()`,
|
|
205
|
+
* but only supports keyword-level queries on inner values.
|
|
206
|
+
*/
|
|
207
|
+
export const flattened = (options) => ({
|
|
208
|
+
type: 'flattened',
|
|
209
|
+
...options
|
|
210
|
+
});
|
package/dist/field.types.d.ts
CHANGED
|
@@ -14,6 +14,14 @@ export type TextFieldOptions = {
|
|
|
14
14
|
doc_values?: boolean;
|
|
15
15
|
similarity?: string;
|
|
16
16
|
fields?: Record<string, FieldMapping>;
|
|
17
|
+
copy_to?: string | string[];
|
|
18
|
+
index_prefixes?: {
|
|
19
|
+
min_chars?: number;
|
|
20
|
+
max_chars?: number;
|
|
21
|
+
};
|
|
22
|
+
index_phrases?: boolean;
|
|
23
|
+
eager_global_ordinals?: boolean;
|
|
24
|
+
term_vector?: 'no' | 'yes' | 'with_positions' | 'with_offsets' | 'with_positions_offsets' | 'with_positions_payloads' | 'with_positions_offsets_payloads';
|
|
17
25
|
};
|
|
18
26
|
/** Options for keyword fields */
|
|
19
27
|
export type KeywordFieldOptions = {
|
|
@@ -24,6 +32,10 @@ export type KeywordFieldOptions = {
|
|
|
24
32
|
similarity?: string;
|
|
25
33
|
normalizer?: string;
|
|
26
34
|
fields?: Record<string, FieldMapping>;
|
|
35
|
+
copy_to?: string | string[];
|
|
36
|
+
null_value?: string;
|
|
37
|
+
eager_global_ordinals?: boolean;
|
|
38
|
+
ignore_above?: number;
|
|
27
39
|
};
|
|
28
40
|
/** Options shared by numeric field types (long, integer, short, byte, double, float, half_float) */
|
|
29
41
|
export type NumericFieldOptions = {
|
|
@@ -33,6 +45,9 @@ export type NumericFieldOptions = {
|
|
|
33
45
|
doc_values?: boolean;
|
|
34
46
|
coerce?: boolean;
|
|
35
47
|
fields?: Record<string, FieldMapping>;
|
|
48
|
+
copy_to?: string | string[];
|
|
49
|
+
null_value?: number;
|
|
50
|
+
ignore_malformed?: boolean;
|
|
36
51
|
};
|
|
37
52
|
/** Options for scaled_float (extends numeric with scaling_factor) */
|
|
38
53
|
export type ScaledFloatFieldOptions = NumericFieldOptions & {
|
|
@@ -46,6 +61,9 @@ export type DateFieldOptions = {
|
|
|
46
61
|
store?: boolean;
|
|
47
62
|
doc_values?: boolean;
|
|
48
63
|
fields?: Record<string, FieldMapping>;
|
|
64
|
+
copy_to?: string | string[];
|
|
65
|
+
null_value?: string;
|
|
66
|
+
ignore_malformed?: boolean;
|
|
49
67
|
};
|
|
50
68
|
/** Options for boolean fields */
|
|
51
69
|
export type BooleanFieldOptions = {
|
|
@@ -53,6 +71,7 @@ export type BooleanFieldOptions = {
|
|
|
53
71
|
index?: boolean;
|
|
54
72
|
store?: boolean;
|
|
55
73
|
doc_values?: boolean;
|
|
74
|
+
null_value?: boolean;
|
|
56
75
|
};
|
|
57
76
|
/** Options for dense_vector fields */
|
|
58
77
|
export type DenseVectorFieldOptions = {
|
|
@@ -81,6 +100,7 @@ export type GeoPointFieldOptions = {
|
|
|
81
100
|
index?: boolean;
|
|
82
101
|
store?: boolean;
|
|
83
102
|
doc_values?: boolean;
|
|
103
|
+
ignore_malformed?: boolean;
|
|
84
104
|
};
|
|
85
105
|
/** Options for geo_shape fields */
|
|
86
106
|
export type GeoShapeFieldOptions = {
|
|
@@ -92,7 +112,7 @@ export type GeoShapeFieldOptions = {
|
|
|
92
112
|
};
|
|
93
113
|
/** Options for alias fields */
|
|
94
114
|
export type AliasFieldOptions = {
|
|
95
|
-
path
|
|
115
|
+
path: string;
|
|
96
116
|
};
|
|
97
117
|
/** Options for ip fields */
|
|
98
118
|
export type IpFieldOptions = {
|
|
@@ -100,6 +120,8 @@ export type IpFieldOptions = {
|
|
|
100
120
|
index?: boolean;
|
|
101
121
|
store?: boolean;
|
|
102
122
|
doc_values?: boolean;
|
|
123
|
+
null_value?: string;
|
|
124
|
+
ignore_malformed?: boolean;
|
|
103
125
|
};
|
|
104
126
|
/** Options for range fields (integer_range, float_range, long_range, double_range, date_range) */
|
|
105
127
|
export type RangeFieldOptions = {
|
|
@@ -109,6 +131,56 @@ export type RangeFieldOptions = {
|
|
|
109
131
|
doc_values?: boolean;
|
|
110
132
|
coerce?: boolean;
|
|
111
133
|
};
|
|
134
|
+
/**
|
|
135
|
+
* Options for match_only_text fields.
|
|
136
|
+
* Use when you only need filter/match but not relevance scoring — faster and uses less disk.
|
|
137
|
+
*/
|
|
138
|
+
export type MatchOnlyTextFieldOptions = {
|
|
139
|
+
fields?: Record<string, FieldMapping>;
|
|
140
|
+
copy_to?: string | string[];
|
|
141
|
+
meta?: Record<string, string>;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* Options for search_as_you_type fields.
|
|
145
|
+
* Provides out-of-the-box autocomplete / typeahead capabilities.
|
|
146
|
+
*/
|
|
147
|
+
export type SearchAsYouTypeFieldOptions = {
|
|
148
|
+
analyzer?: string;
|
|
149
|
+
search_analyzer?: string;
|
|
150
|
+
max_shingle_size?: number;
|
|
151
|
+
index?: boolean;
|
|
152
|
+
similarity?: string;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Options for constant_keyword fields.
|
|
156
|
+
* Every document in the index has the same value for this field.
|
|
157
|
+
* Useful for multi-index queries to identify the index type.
|
|
158
|
+
*/
|
|
159
|
+
export type ConstantKeywordFieldOptions = {
|
|
160
|
+
value?: string;
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Options for wildcard fields.
|
|
164
|
+
* Optimized for grep-like wildcard/regexp queries on high-cardinality or large fields.
|
|
165
|
+
* Use instead of keyword when leading wildcards (`*foo`) are needed.
|
|
166
|
+
*/
|
|
167
|
+
export type WildcardFieldOptions = {
|
|
168
|
+
null_value?: string;
|
|
169
|
+
ignore_above?: number;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Options for flattened fields.
|
|
173
|
+
* Flattens complex/dynamic objects into a single field. Faster than nested,
|
|
174
|
+
* but only supports keyword-level queries on inner values.
|
|
175
|
+
*/
|
|
176
|
+
export type FlattenedFieldOptions = {
|
|
177
|
+
depth_limit?: number;
|
|
178
|
+
doc_values?: boolean;
|
|
179
|
+
index?: boolean;
|
|
180
|
+
null_value?: string;
|
|
181
|
+
similarity?: string;
|
|
182
|
+
eager_global_ordinals?: boolean;
|
|
183
|
+
};
|
|
112
184
|
export type TypedFieldMapping<T extends string> = Omit<FieldMapping, 'type'> & {
|
|
113
185
|
type: T;
|
|
114
186
|
};
|
|
@@ -139,4 +211,9 @@ export type FloatRangeFieldMapping = TypedFieldMapping<'float_range'>;
|
|
|
139
211
|
export type LongRangeFieldMapping = TypedFieldMapping<'long_range'>;
|
|
140
212
|
export type DoubleRangeFieldMapping = TypedFieldMapping<'double_range'>;
|
|
141
213
|
export type DateRangeFieldMapping = TypedFieldMapping<'date_range'>;
|
|
214
|
+
export type MatchOnlyTextFieldMapping = TypedFieldMapping<'match_only_text'>;
|
|
215
|
+
export type SearchAsYouTypeFieldMapping = TypedFieldMapping<'search_as_you_type'>;
|
|
216
|
+
export type ConstantKeywordFieldMapping = TypedFieldMapping<'constant_keyword'>;
|
|
217
|
+
export type WildcardFieldMapping = TypedFieldMapping<'wildcard'>;
|
|
218
|
+
export type FlattenedFieldMapping = TypedFieldMapping<'flattened'>;
|
|
142
219
|
//# sourceMappingURL=field.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.types.d.ts","sourceRoot":"","sources":["../src/field.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,8BAA8B;AAC9B,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACvC,CAAC;AAEF,iCAAiC;AACjC,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"field.types.d.ts","sourceRoot":"","sources":["../src/field.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,12 +9,24 @@ import type { IndexBuilder, CreateIndexOptions } from './index-management.types.
|
|
|
9
9
|
*/
|
|
10
10
|
export declare const createIndexBuilder: (state?: CreateIndexOptions) => IndexBuilder;
|
|
11
11
|
/**
|
|
12
|
-
* Create a new index builder
|
|
12
|
+
* Create a new index builder for Elasticsearch index configuration.
|
|
13
|
+
*
|
|
14
|
+
* Typical lifecycle:
|
|
15
|
+
* 1. **Create index:** `indexBuilder().mappings(schema).settings(productionSearchSettings()).build()`
|
|
16
|
+
* 2. **Bulk ingest:** Apply `fastIngestSettings()` via ES `_settings` API → bulk index →
|
|
17
|
+
* apply `productionSearchSettings()` → `POST /index/_refresh`
|
|
18
|
+
* 3. **Normal operations:** Query, update individual docs via `_update` API
|
|
19
|
+
* 4. **Migration with mapping changes:** Create new index with new mappings → `POST _reindex`
|
|
20
|
+
* from old → atomically swap alias via `POST _aliases` → delete old index
|
|
21
|
+
*
|
|
22
|
+
* After bulk loading, remember to refresh the index with `POST /index/_refresh`
|
|
23
|
+
* to make all documents searchable.
|
|
24
|
+
*
|
|
13
25
|
* @example
|
|
14
26
|
* const indexConfig = indexBuilder()
|
|
15
27
|
* .mappings(productMappings)
|
|
16
|
-
* .settings(
|
|
17
|
-
* .alias('
|
|
28
|
+
* .settings(productionSearchSettings())
|
|
29
|
+
* .alias('products')
|
|
18
30
|
* .build();
|
|
19
31
|
*/
|
|
20
32
|
export declare const indexBuilder: () => IndexBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-management.builder.d.ts","sourceRoot":"","sources":["../src/index-management.builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index-management.builder.d.ts","sourceRoot":"","sources":["../src/index-management.builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAiC,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAOnH;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAO,kBAAuB,KAAG,YAiClE,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,YAAY,oBAA6B,CAAC"}
|
|
@@ -8,13 +8,23 @@ const isMappingsSchema = (input) => '_fieldTypes' in input;
|
|
|
8
8
|
* @returns IndexBuilder instance
|
|
9
9
|
*/
|
|
10
10
|
export const createIndexBuilder = (state = {}) => ({
|
|
11
|
-
mappings: (schemaOrFields) => {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
mappings: (schemaOrFields, inlineOptions) => {
|
|
12
|
+
const rawProperties = isMappingsSchema(schemaOrFields) ? schemaOrFields.properties : schemaOrFields;
|
|
13
|
+
const properties = Object.fromEntries(Object.entries(rawProperties).filter(([, v]) => v !== undefined));
|
|
14
|
+
const schemaOptions = isMappingsSchema(schemaOrFields) ? schemaOrFields._mappingOptions : undefined;
|
|
15
|
+
const mappingOptions = {
|
|
16
|
+
dynamic: 'strict',
|
|
17
|
+
...schemaOptions,
|
|
18
|
+
...inlineOptions
|
|
19
|
+
};
|
|
15
20
|
return createIndexBuilder({
|
|
16
21
|
...state,
|
|
17
|
-
mappings: {
|
|
22
|
+
mappings: {
|
|
23
|
+
properties,
|
|
24
|
+
...(mappingOptions.dynamic !== undefined && { dynamic: mappingOptions.dynamic }),
|
|
25
|
+
...(mappingOptions._source !== undefined && { _source: mappingOptions._source }),
|
|
26
|
+
...(mappingOptions._meta && { _meta: mappingOptions._meta })
|
|
27
|
+
}
|
|
18
28
|
});
|
|
19
29
|
},
|
|
20
30
|
settings: (settings) => createIndexBuilder({ ...state, settings }),
|
|
@@ -25,15 +35,29 @@ export const createIndexBuilder = (state = {}) => ({
|
|
|
25
35
|
aliases: { ...aliases, [name]: options }
|
|
26
36
|
});
|
|
27
37
|
},
|
|
38
|
+
// eslint-disable-next-line functional/functional-parameters
|
|
28
39
|
build: () => state
|
|
29
40
|
});
|
|
30
41
|
/**
|
|
31
|
-
* Create a new index builder
|
|
42
|
+
* Create a new index builder for Elasticsearch index configuration.
|
|
43
|
+
*
|
|
44
|
+
* Typical lifecycle:
|
|
45
|
+
* 1. **Create index:** `indexBuilder().mappings(schema).settings(productionSearchSettings()).build()`
|
|
46
|
+
* 2. **Bulk ingest:** Apply `fastIngestSettings()` via ES `_settings` API → bulk index →
|
|
47
|
+
* apply `productionSearchSettings()` → `POST /index/_refresh`
|
|
48
|
+
* 3. **Normal operations:** Query, update individual docs via `_update` API
|
|
49
|
+
* 4. **Migration with mapping changes:** Create new index with new mappings → `POST _reindex`
|
|
50
|
+
* from old → atomically swap alias via `POST _aliases` → delete old index
|
|
51
|
+
*
|
|
52
|
+
* After bulk loading, remember to refresh the index with `POST /index/_refresh`
|
|
53
|
+
* to make all documents searchable.
|
|
54
|
+
*
|
|
32
55
|
* @example
|
|
33
56
|
* const indexConfig = indexBuilder()
|
|
34
57
|
* .mappings(productMappings)
|
|
35
|
-
* .settings(
|
|
36
|
-
* .alias('
|
|
58
|
+
* .settings(productionSearchSettings())
|
|
59
|
+
* .alias('products')
|
|
37
60
|
* .build();
|
|
38
61
|
*/
|
|
62
|
+
// eslint-disable-next-line functional/functional-parameters
|
|
39
63
|
export const indexBuilder = () => createIndexBuilder();
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* @see https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html
|
|
5
5
|
*/
|
|
6
6
|
import type { IndicesIndexSettings, IndicesAlias } from '@elastic/elasticsearch/lib/api/types';
|
|
7
|
-
import type { MappingsSchema } from './mapping.types.js';
|
|
7
|
+
import type { MappingsSchema, MappingOptions } from './mapping.types.js';
|
|
8
8
|
/**
|
|
9
9
|
* All supported Elasticsearch field type strings.
|
|
10
10
|
*/
|
|
11
|
-
export type FieldTypeString = 'text' | 'keyword' | 'long' | 'integer' | 'short' | 'byte' | 'double' | 'float' | 'half_float' | 'scaled_float' | 'date' | 'boolean' | 'binary' | 'integer_range' | 'float_range' | 'long_range' | 'double_range' | 'date_range' | 'ip' | 'alias' | 'object' | 'nested' | 'geo_point' | 'geo_shape' | 'completion' | 'dense_vector' | 'percolator';
|
|
11
|
+
export type FieldTypeString = 'text' | 'match_only_text' | 'keyword' | 'constant_keyword' | 'wildcard' | 'long' | 'integer' | 'short' | 'byte' | 'double' | 'float' | 'half_float' | 'scaled_float' | 'date' | 'boolean' | 'binary' | 'integer_range' | 'float_range' | 'long_range' | 'double_range' | 'date_range' | 'ip' | 'alias' | 'object' | 'nested' | 'flattened' | 'geo_point' | 'geo_shape' | 'completion' | 'search_as_you_type' | 'dense_vector' | 'percolator';
|
|
12
12
|
/**
|
|
13
13
|
* Field mapping definition.
|
|
14
14
|
*/
|
|
@@ -36,6 +36,28 @@ export type FieldMapping = {
|
|
|
36
36
|
preserve_separators?: boolean;
|
|
37
37
|
preserve_position_increments?: boolean;
|
|
38
38
|
orientation?: string;
|
|
39
|
+
copy_to?: string | string[];
|
|
40
|
+
index_prefixes?: {
|
|
41
|
+
min_chars?: number;
|
|
42
|
+
max_chars?: number;
|
|
43
|
+
};
|
|
44
|
+
index_phrases?: boolean;
|
|
45
|
+
ignore_malformed?: boolean;
|
|
46
|
+
null_value?: string | number | boolean;
|
|
47
|
+
eager_global_ordinals?: boolean;
|
|
48
|
+
term_vector?: string;
|
|
49
|
+
ignore_above?: number;
|
|
50
|
+
max_shingle_size?: number;
|
|
51
|
+
value?: string;
|
|
52
|
+
depth_limit?: number;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* _source field configuration for index mappings.
|
|
56
|
+
*/
|
|
57
|
+
export type SourceConfig = {
|
|
58
|
+
enabled?: boolean;
|
|
59
|
+
includes?: string[];
|
|
60
|
+
excludes?: string[];
|
|
39
61
|
};
|
|
40
62
|
/**
|
|
41
63
|
* Index mappings configuration.
|
|
@@ -44,6 +66,8 @@ export type IndexMappings = {
|
|
|
44
66
|
properties: Record<string, FieldMapping>;
|
|
45
67
|
dynamic?: boolean | 'strict' | 'runtime';
|
|
46
68
|
dynamic_templates?: any[];
|
|
69
|
+
_source?: SourceConfig;
|
|
70
|
+
_meta?: Record<string, unknown>;
|
|
47
71
|
};
|
|
48
72
|
/**
|
|
49
73
|
* Index settings configuration — re-exported from official @elastic/elasticsearch types
|
|
@@ -62,7 +86,7 @@ export type CreateIndexOptions = {
|
|
|
62
86
|
* Index builder interface
|
|
63
87
|
*/
|
|
64
88
|
export type IndexBuilder = {
|
|
65
|
-
mappings: (schemaOrFields: MappingsSchema<Record<string, FieldTypeString>> | Record<string, FieldMapping
|
|
89
|
+
mappings: (schemaOrFields: MappingsSchema<Record<string, FieldTypeString>> | Record<string, FieldMapping>, options?: MappingOptions) => IndexBuilder;
|
|
66
90
|
settings: (settings: IndexSettings) => IndexBuilder;
|
|
67
91
|
alias: (name: string, options?: IndicesAlias) => IndexBuilder;
|
|
68
92
|
build: () => CreateIndexOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-management.types.d.ts","sourceRoot":"","sources":["../src/index-management.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index-management.types.d.ts","sourceRoot":"","sources":["../src/index-management.types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ export type { QueryBuilder, ClauseBuilder } from './query.types.js';
|
|
|
5
5
|
export { aggregations } from './aggregation.builder.js';
|
|
6
6
|
export type { AggregationBuilder } from './aggregation.types.js';
|
|
7
7
|
export { mappings } from './mapping.builder.js';
|
|
8
|
-
export { text, keyword, long, integer, short, byte, double, float, halfFloat, scaledFloat, date, boolean, binary, ip, denseVector, geoPoint, geoShape, completion, nested, object, alias, percolator, integerRange, floatRange, longRange, doubleRange, dateRange } from './field.helpers.js';
|
|
9
|
-
export type { MappingsSchema, Infer, FieldsOfType, TextFields, KeywordFields, NumericFields, DateFields, BooleanFields, GeoPointFields, VectorFields } from './mapping.types.js';
|
|
8
|
+
export { text, keyword, long, integer, short, byte, double, float, halfFloat, scaledFloat, date, boolean, binary, ip, denseVector, geoPoint, geoShape, completion, nested, object, alias, percolator, integerRange, floatRange, longRange, doubleRange, dateRange, matchOnlyText, searchAsYouType, constantKeyword, wildcardField, flattened, quantizedDenseVector } from './field.helpers.js';
|
|
9
|
+
export type { MappingsSchema, Infer, FieldsOfType, TextFields, KeywordFields, NumericFields, DateFields, BooleanFields, GeoPointFields, VectorFields, IpFields } from './mapping.types.js';
|
|
10
10
|
export { msearch } from './multi-search.builder.js';
|
|
11
11
|
export type { MSearchBuilder } from './multi-search.types.js';
|
|
12
12
|
export { bulk } from './bulk.builder.js';
|
|
@@ -15,4 +15,5 @@ export { indexBuilder } from './index-management.builder.js';
|
|
|
15
15
|
export type { IndexBuilder } from './index-management.types.js';
|
|
16
16
|
export { suggest } from './suggester.builder.js';
|
|
17
17
|
export type { SuggesterBuilder } from './suggester.types.js';
|
|
18
|
+
export { productionSearchSettings, indexSortSettings, fastIngestSettings } from './settings.presets.js';
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC7D,SAAS,cAAc,CAAC,CAAC,CAAC,EAC1B,eAAc,OAAc,+CAC6B,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,EACX,IAAI,EACJ,OAAO,EACP,MAAM,EACN,EAAE,EACF,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,KAAK,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EAC7D,SAAS,cAAc,CAAC,CAAC,CAAC,EAC1B,eAAc,OAAc,+CAC6B,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,EACX,IAAI,EACJ,OAAO,EACP,MAAM,EACN,EAAE,EACF,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,KAAK,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,SAAS,EACT,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,cAAc,EACd,KAAK,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,aAAa,EACb,UAAU,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export const query = (_schema, includeQuery = true) => createQueryBuilder({ _inc
|
|
|
5
5
|
export { aggregations } from './aggregation.builder.js';
|
|
6
6
|
// Mappings API
|
|
7
7
|
export { mappings } from './mapping.builder.js';
|
|
8
|
-
export { text, keyword, long, integer, short, byte, double, float, halfFloat, scaledFloat, date, boolean, binary, ip, denseVector, geoPoint, geoShape, completion, nested, object, alias, percolator, integerRange, floatRange, longRange, doubleRange, dateRange } from './field.helpers.js';
|
|
8
|
+
export { text, keyword, long, integer, short, byte, double, float, halfFloat, scaledFloat, date, boolean, binary, ip, denseVector, geoPoint, geoShape, completion, nested, object, alias, percolator, integerRange, floatRange, longRange, doubleRange, dateRange, matchOnlyText, searchAsYouType, constantKeyword, wildcardField, flattened, quantizedDenseVector } from './field.helpers.js';
|
|
9
9
|
// Multi-search API
|
|
10
10
|
export { msearch } from './multi-search.builder.js';
|
|
11
11
|
// Bulk API
|
|
@@ -14,3 +14,5 @@ export { bulk } from './bulk.builder.js';
|
|
|
14
14
|
export { indexBuilder } from './index-management.builder.js';
|
|
15
15
|
// Suggester API
|
|
16
16
|
export { suggest } from './suggester.builder.js';
|
|
17
|
+
// Settings Presets
|
|
18
|
+
export { productionSearchSettings, indexSortSettings, fastIngestSettings } from './settings.presets.js';
|
|
@@ -2,23 +2,36 @@
|
|
|
2
2
|
* Mappings builder — creates a MappingsSchema artifact from field helper functions.
|
|
3
3
|
* The schema carries field-type info at compile time and ES-compatible properties at runtime.
|
|
4
4
|
*
|
|
5
|
+
* Defaults to `dynamic: 'strict'` to prevent unmapped fields from being silently
|
|
6
|
+
* indexed. Override with `mappings(fields, { dynamic: true })` if needed.
|
|
7
|
+
*
|
|
5
8
|
* @example
|
|
6
|
-
* import { mappings, text, keyword, float } from 'elasticlink';
|
|
9
|
+
* import { mappings, text, keyword, float, denseVector } from 'elasticlink';
|
|
7
10
|
*
|
|
8
11
|
* const productMappings = mappings({
|
|
9
12
|
* name: text({ analyzer: 'standard' }),
|
|
10
13
|
* category: keyword(),
|
|
11
14
|
* price: float(),
|
|
12
15
|
* });
|
|
16
|
+
* // dynamic: 'strict' by default — unknown fields cause an indexing error
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Exclude dense_vector fields from _source to reduce response size
|
|
20
|
+
* const searchMappings = mappings({
|
|
21
|
+
* title: text(),
|
|
22
|
+
* embedding: denseVector({ dims: 768 }),
|
|
23
|
+
* }, {
|
|
24
|
+
* _source: { excludes: ['embedding'] },
|
|
25
|
+
* });
|
|
13
26
|
*/
|
|
14
27
|
import type { FieldMapping, FieldTypeString } from './index-management.types.js';
|
|
15
|
-
import type { MappingsSchema } from './mapping.types.js';
|
|
28
|
+
import type { MappingOptions, MappingsSchema } from './mapping.types.js';
|
|
16
29
|
type FieldMappingWithLiteralType = FieldMapping & {
|
|
17
30
|
type: FieldTypeString;
|
|
18
31
|
};
|
|
19
32
|
type ExtractFieldTypes<F extends Record<string, FieldMappingWithLiteralType>> = {
|
|
20
33
|
[K in keyof F]: F[K]['type'];
|
|
21
34
|
};
|
|
22
|
-
export declare const mappings: <F extends Record<string, FieldMappingWithLiteralType>>(fields: F) => MappingsSchema<ExtractFieldTypes<F>>;
|
|
35
|
+
export declare const mappings: <F extends Record<string, FieldMappingWithLiteralType>>(fields: F, options?: MappingOptions) => MappingsSchema<ExtractFieldTypes<F>>;
|
|
23
36
|
export {};
|
|
24
37
|
//# sourceMappingURL=mapping.builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.builder.d.ts","sourceRoot":"","sources":["../src/mapping.builder.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mapping.builder.d.ts","sourceRoot":"","sources":["../src/mapping.builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzE,KAAK,2BAA2B,GAAG,YAAY,GAAG;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAE5E,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI;KAC7E,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,EAC5E,QAAQ,CAAC,EACT,UAAU,cAAc,KACvB,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAarC,CAAC"}
|
package/dist/mapping.builder.js
CHANGED
|
@@ -2,22 +2,37 @@
|
|
|
2
2
|
* Mappings builder — creates a MappingsSchema artifact from field helper functions.
|
|
3
3
|
* The schema carries field-type info at compile time and ES-compatible properties at runtime.
|
|
4
4
|
*
|
|
5
|
+
* Defaults to `dynamic: 'strict'` to prevent unmapped fields from being silently
|
|
6
|
+
* indexed. Override with `mappings(fields, { dynamic: true })` if needed.
|
|
7
|
+
*
|
|
5
8
|
* @example
|
|
6
|
-
* import { mappings, text, keyword, float } from 'elasticlink';
|
|
9
|
+
* import { mappings, text, keyword, float, denseVector } from 'elasticlink';
|
|
7
10
|
*
|
|
8
11
|
* const productMappings = mappings({
|
|
9
12
|
* name: text({ analyzer: 'standard' }),
|
|
10
13
|
* category: keyword(),
|
|
11
14
|
* price: float(),
|
|
12
15
|
* });
|
|
16
|
+
* // dynamic: 'strict' by default — unknown fields cause an indexing error
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Exclude dense_vector fields from _source to reduce response size
|
|
20
|
+
* const searchMappings = mappings({
|
|
21
|
+
* title: text(),
|
|
22
|
+
* embedding: denseVector({ dims: 768 }),
|
|
23
|
+
* }, {
|
|
24
|
+
* _source: { excludes: ['embedding'] },
|
|
25
|
+
* });
|
|
13
26
|
*/
|
|
14
|
-
export const mappings = (fields) => {
|
|
15
|
-
const properties = {};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
27
|
+
export const mappings = (fields, options) => {
|
|
28
|
+
const properties = { ...fields };
|
|
29
|
+
const mappingOptions = {
|
|
30
|
+
dynamic: 'strict',
|
|
31
|
+
...options
|
|
32
|
+
};
|
|
19
33
|
return {
|
|
20
34
|
_fieldTypes: undefined,
|
|
21
|
-
properties
|
|
35
|
+
properties,
|
|
36
|
+
_mappingOptions: mappingOptions
|
|
22
37
|
};
|
|
23
38
|
};
|