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.
Files changed (109) hide show
  1. package/README.md +61 -14
  2. package/dist/__tests__/aggregation-builder.test.d.ts +2 -0
  3. package/dist/__tests__/aggregation-builder.test.d.ts.map +1 -0
  4. package/dist/__tests__/aggregation-builder.test.js +622 -0
  5. package/dist/__tests__/bulk.test.d.ts +2 -0
  6. package/dist/__tests__/bulk.test.d.ts.map +1 -0
  7. package/dist/__tests__/bulk.test.js +679 -0
  8. package/dist/__tests__/examples.test.d.ts +2 -0
  9. package/dist/__tests__/examples.test.d.ts.map +1 -0
  10. package/dist/__tests__/examples.test.js +2123 -0
  11. package/dist/__tests__/fixtures/finance.d.ts +58 -0
  12. package/dist/__tests__/fixtures/finance.d.ts.map +1 -0
  13. package/dist/__tests__/fixtures/finance.js +73 -0
  14. package/dist/__tests__/fixtures/legal.d.ts +14 -0
  15. package/dist/__tests__/fixtures/legal.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/legal.js +27 -0
  17. package/dist/__tests__/fixtures/real-estate.d.ts +31 -0
  18. package/dist/__tests__/fixtures/real-estate.d.ts.map +1 -0
  19. package/dist/__tests__/fixtures/real-estate.js +39 -0
  20. package/dist/__tests__/index-management.test.d.ts +2 -0
  21. package/dist/__tests__/index-management.test.d.ts.map +1 -0
  22. package/dist/__tests__/index-management.test.js +1699 -0
  23. package/dist/__tests__/integration/aggregation.integration.test.d.ts +2 -0
  24. package/dist/__tests__/integration/aggregation.integration.test.d.ts.map +1 -0
  25. package/dist/__tests__/integration/aggregation.integration.test.js +188 -0
  26. package/dist/__tests__/integration/bulk.integration.test.d.ts +2 -0
  27. package/dist/__tests__/integration/bulk.integration.test.d.ts.map +1 -0
  28. package/dist/__tests__/integration/bulk.integration.test.js +90 -0
  29. package/dist/__tests__/integration/fixtures/finance.d.ts +37 -0
  30. package/dist/__tests__/integration/fixtures/finance.d.ts.map +1 -0
  31. package/dist/__tests__/integration/fixtures/finance.js +58 -0
  32. package/dist/__tests__/integration/fixtures/legal.d.ts +38 -0
  33. package/dist/__tests__/integration/fixtures/legal.d.ts.map +1 -0
  34. package/dist/__tests__/integration/fixtures/legal.js +65 -0
  35. package/dist/__tests__/integration/fixtures/real-estate.d.ts +17 -0
  36. package/dist/__tests__/integration/fixtures/real-estate.d.ts.map +1 -0
  37. package/dist/__tests__/integration/fixtures/real-estate.js +28 -0
  38. package/dist/__tests__/integration/helpers.d.ts +15 -0
  39. package/dist/__tests__/integration/helpers.d.ts.map +1 -0
  40. package/dist/__tests__/integration/helpers.js +21 -0
  41. package/dist/__tests__/integration/index-management.integration.test.d.ts +2 -0
  42. package/dist/__tests__/integration/index-management.integration.test.d.ts.map +1 -0
  43. package/dist/__tests__/integration/index-management.integration.test.js +67 -0
  44. package/dist/__tests__/integration/multi-search.integration.test.d.ts +2 -0
  45. package/dist/__tests__/integration/multi-search.integration.test.d.ts.map +1 -0
  46. package/dist/__tests__/integration/multi-search.integration.test.js +49 -0
  47. package/dist/__tests__/integration/query.integration.test.d.ts +2 -0
  48. package/dist/__tests__/integration/query.integration.test.d.ts.map +1 -0
  49. package/dist/__tests__/integration/query.integration.test.js +101 -0
  50. package/dist/__tests__/integration/suggester.integration.test.d.ts +2 -0
  51. package/dist/__tests__/integration/suggester.integration.test.d.ts.map +1 -0
  52. package/dist/__tests__/integration/suggester.integration.test.js +42 -0
  53. package/dist/__tests__/multi-search.test.d.ts +2 -0
  54. package/dist/__tests__/multi-search.test.d.ts.map +1 -0
  55. package/dist/__tests__/multi-search.test.js +325 -0
  56. package/dist/__tests__/query-builder-extensions.test.d.ts +2 -0
  57. package/dist/__tests__/query-builder-extensions.test.d.ts.map +1 -0
  58. package/dist/__tests__/query-builder-extensions.test.js +436 -0
  59. package/dist/__tests__/query-builder.test.d.ts +2 -0
  60. package/dist/__tests__/query-builder.test.d.ts.map +1 -0
  61. package/dist/__tests__/query-builder.test.js +5482 -0
  62. package/dist/__tests__/settings-presets.test.d.ts +2 -0
  63. package/dist/__tests__/settings-presets.test.d.ts.map +1 -0
  64. package/dist/__tests__/settings-presets.test.js +183 -0
  65. package/dist/__tests__/suggester.test.d.ts +2 -0
  66. package/dist/__tests__/suggester.test.d.ts.map +1 -0
  67. package/dist/__tests__/suggester.test.js +1006 -0
  68. package/dist/aggregation.builder.d.ts.map +1 -1
  69. package/dist/aggregation.builder.js +101 -94
  70. package/dist/aggregation.types.d.ts +10 -9
  71. package/dist/aggregation.types.d.ts.map +1 -1
  72. package/dist/bulk.builder.d.ts +11 -1
  73. package/dist/bulk.builder.d.ts.map +1 -1
  74. package/dist/bulk.builder.js +10 -11
  75. package/dist/bulk.types.d.ts.map +1 -1
  76. package/dist/field.helpers.d.ts +59 -4
  77. package/dist/field.helpers.d.ts.map +1 -1
  78. package/dist/field.helpers.js +87 -4
  79. package/dist/field.types.d.ts +78 -1
  80. package/dist/field.types.d.ts.map +1 -1
  81. package/dist/index-management.builder.d.ts +15 -3
  82. package/dist/index-management.builder.d.ts.map +1 -1
  83. package/dist/index-management.builder.js +32 -8
  84. package/dist/index-management.types.d.ts +27 -3
  85. package/dist/index-management.types.d.ts.map +1 -1
  86. package/dist/index.d.ts +3 -2
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +3 -1
  89. package/dist/mapping.builder.d.ts +16 -3
  90. package/dist/mapping.builder.d.ts.map +1 -1
  91. package/dist/mapping.builder.js +22 -7
  92. package/dist/mapping.types.d.ts +29 -6
  93. package/dist/mapping.types.d.ts.map +1 -1
  94. package/dist/multi-search.builder.d.ts +1 -1
  95. package/dist/multi-search.builder.d.ts.map +1 -1
  96. package/dist/multi-search.builder.js +5 -3
  97. package/dist/query.builder.d.ts +0 -4
  98. package/dist/query.builder.d.ts.map +1 -1
  99. package/dist/query.builder.js +104 -183
  100. package/dist/query.types.d.ts +59 -5
  101. package/dist/query.types.d.ts.map +1 -1
  102. package/dist/settings.presets.d.ts +98 -0
  103. package/dist/settings.presets.d.ts.map +1 -0
  104. package/dist/settings.presets.js +115 -0
  105. package/dist/suggester.builder.d.ts.map +1 -1
  106. package/dist/suggester.builder.js +1 -0
  107. package/dist/suggester.types.d.ts.map +1 -1
  108. package/dist/vector.types.d.ts.map +1 -1
  109. package/package.json +6 -3
@@ -51,7 +51,10 @@ export const halfFloat = (options) => ({
51
51
  type: 'half_float',
52
52
  ...options
53
53
  });
54
- export const scaledFloat = (options) => ({ type: 'scaled_float', ...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) => ({ type: 'dense_vector', ...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?.enabled !== undefined && { enabled: options.enabled }),
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
- export const resolveField = (input) => input;
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
+ });
@@ -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?: string;
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":"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"}
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({ number_of_shards: 1, number_of_replicas: 1 })
17
- * .alias('products_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,EAGV,YAAY,EACZ,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAUrC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,QAAO,kBAAuB,KAC7B,YAsBD,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,oBAA6B,CAAC"}
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 properties = isMappingsSchema(schemaOrFields)
13
- ? schemaOrFields.properties
14
- : schemaOrFields;
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: { properties }
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({ number_of_shards: 1, number_of_replicas: 1 })
36
- * .alias('products_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>) => IndexBuilder;
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,EACV,oBAAoB,EACpB,YAAY,EACb,MAAM,sCAAsC,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,SAAS,GACT,MAAM,GACN,SAAS,GACT,OAAO,GACP,MAAM,GACN,QAAQ,GACR,OAAO,GACP,YAAY,GACZ,cAAc,GACd,MAAM,GACN,SAAS,GACT,QAAQ,GACR,eAAe,GACf,aAAa,GACb,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,IAAI,GACJ,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,YAAY,GACZ,cAAc,GACd,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACtC,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,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAEzC,iBAAiB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACxC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,CACR,cAAc,EACV,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,GAC/C,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,KAC7B,YAAY,CAAC;IAClB,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,YAAY,CAAC;IACpD,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,YAAY,CAAC;IAC9D,KAAK,EAAE,MAAM,kBAAkB,CAAC;CACjC,CAAC"}
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
@@ -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,EACV,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,EACb,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"}
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;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,KAAK,2BAA2B,GAAG,YAAY,GAAG;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAE5E,KAAK,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAC1E;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;CAC7B,CAAC;AAEJ,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,EAC5E,QAAQ,CAAC,KACR,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC,CASrC,CAAC"}
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"}
@@ -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
- for (const key of Object.keys(fields)) {
17
- properties[key] = fields[key];
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
  };