node-type-registry 0.19.0 → 0.20.0
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/authz/authz-allow-all.js +10 -10
- package/authz/authz-composite.js +28 -28
- package/authz/authz-deny-all.js +10 -10
- package/authz/authz-direct-owner-any.js +19 -18
- package/authz/authz-direct-owner.js +17 -16
- package/authz/authz-entity-membership.js +39 -38
- package/authz/authz-member-list.js +17 -16
- package/authz/authz-membership-check.js +34 -34
- package/authz/authz-not-read-only.js +23 -22
- package/authz/authz-org-hierarchy.js +33 -31
- package/authz/authz-peer-ownership.js +40 -39
- package/authz/authz-publishable.js +26 -24
- package/authz/authz-related-entity-membership.js +57 -55
- package/authz/authz-related-member-list.js +35 -32
- package/authz/authz-related-peer-ownership.js +62 -59
- package/authz/authz-temporal.js +32 -30
- package/authz/index.d.ts +9 -9
- package/authz/index.js +19 -19
- package/blueprint-types.generated.js +1 -1
- package/codegen/generate-types.js +1 -1
- package/data/data-composite-field.js +27 -25
- package/data/data-direct-owner.js +24 -23
- package/data/data-entity-membership.js +24 -23
- package/data/data-force-current-user.js +17 -16
- package/data/data-id.js +16 -15
- package/data/data-immutable-fields.js +20 -19
- package/data/data-inflection.js +33 -32
- package/data/data-inherit-from-parent.js +31 -29
- package/data/data-job-trigger.js +87 -84
- package/data/data-jsonb.js +27 -26
- package/data/data-owned-fields.js +25 -23
- package/data/data-ownership-in-entity.js +21 -21
- package/data/data-peoplestamps.js +19 -19
- package/data/data-publishable.js +16 -16
- package/data/data-slug.js +21 -19
- package/data/data-soft-delete.js +14 -14
- package/data/data-status-field.js +32 -31
- package/data/data-tags.js +23 -22
- package/data/data-timestamps.js +15 -15
- package/data/index.d.ts +17 -17
- package/data/index.js +35 -35
- package/data/search-bm25.js +34 -33
- package/data/search-full-text.js +49 -47
- package/data/search-spatial-aggregate.js +77 -74
- package/data/search-spatial.js +51 -50
- package/data/search-trgm.js +20 -19
- package/data/search-unified.js +170 -162
- package/data/search-vector.js +104 -101
- package/data/table-organization-settings.js +13 -13
- package/data/table-user-profiles.js +13 -13
- package/data/table-user-settings.js +13 -13
- package/esm/authz/authz-allow-all.js +10 -10
- package/esm/authz/authz-composite.js +28 -28
- package/esm/authz/authz-deny-all.js +10 -10
- package/esm/authz/authz-direct-owner-any.js +19 -18
- package/esm/authz/authz-direct-owner.js +17 -16
- package/esm/authz/authz-entity-membership.js +39 -38
- package/esm/authz/authz-member-list.js +17 -16
- package/esm/authz/authz-membership-check.js +34 -34
- package/esm/authz/authz-not-read-only.js +23 -22
- package/esm/authz/authz-org-hierarchy.js +33 -31
- package/esm/authz/authz-peer-ownership.js +40 -39
- package/esm/authz/authz-publishable.js +26 -24
- package/esm/authz/authz-related-entity-membership.js +57 -55
- package/esm/authz/authz-related-member-list.js +35 -32
- package/esm/authz/authz-related-peer-ownership.js +62 -59
- package/esm/authz/authz-temporal.js +32 -30
- package/esm/authz/index.d.ts +9 -9
- package/esm/authz/index.js +9 -9
- package/esm/blueprint-types.generated.js +1 -1
- package/esm/codegen/generate-types.js +1 -1
- package/esm/data/data-composite-field.js +27 -25
- package/esm/data/data-direct-owner.js +24 -23
- package/esm/data/data-entity-membership.js +24 -23
- package/esm/data/data-force-current-user.js +17 -16
- package/esm/data/data-id.js +16 -15
- package/esm/data/data-immutable-fields.js +20 -19
- package/esm/data/data-inflection.js +33 -32
- package/esm/data/data-inherit-from-parent.js +31 -29
- package/esm/data/data-job-trigger.js +87 -84
- package/esm/data/data-jsonb.js +27 -26
- package/esm/data/data-owned-fields.js +25 -23
- package/esm/data/data-ownership-in-entity.js +21 -21
- package/esm/data/data-peoplestamps.js +19 -19
- package/esm/data/data-publishable.js +16 -16
- package/esm/data/data-slug.js +21 -19
- package/esm/data/data-soft-delete.js +14 -14
- package/esm/data/data-status-field.js +32 -31
- package/esm/data/data-tags.js +23 -22
- package/esm/data/data-timestamps.js +15 -15
- package/esm/data/index.d.ts +17 -17
- package/esm/data/index.js +17 -17
- package/esm/data/search-bm25.js +34 -33
- package/esm/data/search-full-text.js +49 -47
- package/esm/data/search-spatial-aggregate.js +77 -74
- package/esm/data/search-spatial.js +51 -50
- package/esm/data/search-trgm.js +20 -19
- package/esm/data/search-unified.js +170 -162
- package/esm/data/search-vector.js +104 -101
- package/esm/data/table-organization-settings.js +13 -13
- package/esm/data/table-user-profiles.js +13 -13
- package/esm/data/table-user-settings.js +13 -13
- package/esm/index.d.ts +3 -3
- package/esm/index.js +3 -3
- package/esm/module-presets/auth-email-magic.js +2 -2
- package/esm/module-presets/auth-email.js +8 -8
- package/esm/module-presets/auth-passkey.js +4 -4
- package/esm/module-presets/auth-sso.js +7 -7
- package/esm/module-presets/full.js +1 -1
- package/esm/module-presets/index.d.ts +5 -5
- package/esm/module-presets/index.js +4 -4
- package/esm/relation/index.d.ts +1 -1
- package/esm/relation/index.js +1 -1
- package/esm/relation/relation-belongs-to.js +41 -40
- package/esm/relation/relation-has-many.js +42 -41
- package/esm/relation/relation-has-one.js +42 -41
- package/esm/relation/relation-many-to-many.js +70 -68
- package/esm/relation/relation-spatial.js +54 -54
- package/esm/view/index.d.ts +3 -3
- package/esm/view/index.js +3 -3
- package/esm/view/view-aggregated.js +50 -48
- package/esm/view/view-composite.js +18 -18
- package/esm/view/view-filtered-table.js +37 -36
- package/esm/view/view-joined-tables.js +65 -61
- package/esm/view/view-table-projection.js +29 -28
- package/index.d.ts +3 -3
- package/index.js +3 -3
- package/module-presets/auth-email-magic.js +2 -2
- package/module-presets/auth-email.js +8 -8
- package/module-presets/auth-passkey.js +4 -4
- package/module-presets/auth-sso.js +7 -7
- package/module-presets/full.js +1 -1
- package/module-presets/index.d.ts +5 -5
- package/module-presets/index.js +7 -7
- package/package.json +2 -2
- package/relation/index.d.ts +1 -1
- package/relation/index.js +3 -3
- package/relation/relation-belongs-to.js +41 -40
- package/relation/relation-has-many.js +42 -41
- package/relation/relation-has-one.js +42 -41
- package/relation/relation-many-to-many.js +70 -68
- package/relation/relation-spatial.js +54 -54
- package/view/index.d.ts +3 -3
- package/view/index.js +7 -7
- package/view/view-aggregated.js +50 -48
- package/view/view-composite.js +18 -18
- package/view/view-filtered-table.js +37 -36
- package/view/view-joined-tables.js +65 -61
- package/view/view-table-projection.js +29 -28
|
@@ -1,67 +1,68 @@
|
|
|
1
1
|
export const SearchSpatial = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
name: 'SearchSpatial',
|
|
3
|
+
slug: 'search_spatial',
|
|
4
|
+
category: 'search',
|
|
5
|
+
display_name: 'Spatial Search',
|
|
6
|
+
description: 'Adds a PostGIS geometry or geography column with a spatial index (GiST or SP-GiST). Supports configurable geometry types (Point, Polygon, etc.), SRID, and dimensionality. The graphile-postgis plugin auto-detects geometry/geography columns by codec type for spatial filtering (ST_Contains, ST_DWithin, bbox operators).',
|
|
7
|
+
parameter_schema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
field_name: {
|
|
11
|
+
type: 'string',
|
|
12
|
+
format: 'column-ref',
|
|
13
|
+
description: 'Name of the geometry/geography column',
|
|
14
|
+
default: 'geom'
|
|
14
15
|
},
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
16
|
+
geometry_type: {
|
|
17
|
+
type: 'string',
|
|
18
|
+
enum: [
|
|
19
|
+
'Point',
|
|
20
|
+
'LineString',
|
|
21
|
+
'Polygon',
|
|
22
|
+
'MultiPoint',
|
|
23
|
+
'MultiLineString',
|
|
24
|
+
'MultiPolygon',
|
|
25
|
+
'GeometryCollection',
|
|
26
|
+
'Geometry'
|
|
26
27
|
],
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
description: 'PostGIS geometry type constraint',
|
|
29
|
+
default: 'Point'
|
|
29
30
|
},
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
srid: {
|
|
32
|
+
type: 'integer',
|
|
33
|
+
description: 'Spatial Reference System Identifier (e.g. 4326 for WGS84)',
|
|
34
|
+
default: 4326
|
|
34
35
|
},
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
dimension: {
|
|
37
|
+
type: 'integer',
|
|
38
|
+
enum: [
|
|
38
39
|
2,
|
|
39
40
|
3,
|
|
40
41
|
4
|
|
41
42
|
],
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
description: 'Coordinate dimension (2=XY, 3=XYZ, 4=XYZM)',
|
|
44
|
+
default: 2
|
|
44
45
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
use_geography: {
|
|
47
|
+
type: 'boolean',
|
|
48
|
+
description: 'Use geography type instead of geometry (for geodetic calculations on the sphere)',
|
|
49
|
+
default: false
|
|
49
50
|
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
index_method: {
|
|
52
|
+
type: 'string',
|
|
53
|
+
enum: [
|
|
54
|
+
'gist',
|
|
55
|
+
'spgist'
|
|
55
56
|
],
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
description: 'Spatial index method',
|
|
58
|
+
default: 'gist'
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
},
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
tags: [
|
|
63
|
+
'spatial',
|
|
64
|
+
'postgis',
|
|
65
|
+
'geometry',
|
|
66
|
+
'schema'
|
|
66
67
|
]
|
|
67
68
|
};
|
package/esm/data/search-trgm.js
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
export const SearchTrgm = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
name: 'SearchTrgm',
|
|
3
|
+
slug: 'search_trgm',
|
|
4
|
+
category: 'search',
|
|
5
|
+
display_name: 'Trigram Search',
|
|
6
|
+
description: 'Creates GIN trigram indexes (gin_trgm_ops) on specified text/citext fields for fuzzy LIKE/ILIKE/similarity search. Adds @trgmSearch smart tag for PostGraphile integration. Fields must already exist on the table.',
|
|
7
|
+
parameter_schema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
fields: {
|
|
11
|
+
type: 'array',
|
|
12
|
+
items: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
format: 'column-ref'
|
|
14
15
|
},
|
|
15
|
-
|
|
16
|
+
description: 'Field names to create trigram indexes on (fields must already exist on the table)'
|
|
16
17
|
}
|
|
17
18
|
},
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
required: [
|
|
20
|
+
'fields'
|
|
20
21
|
]
|
|
21
22
|
},
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
tags: [
|
|
24
|
+
'search',
|
|
25
|
+
'trigram',
|
|
26
|
+
'schema'
|
|
26
27
|
]
|
|
27
28
|
};
|
|
@@ -1,205 +1,213 @@
|
|
|
1
1
|
export const SearchUnified = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
2
|
+
name: 'SearchUnified',
|
|
3
|
+
slug: 'search_unified',
|
|
4
|
+
category: 'search',
|
|
5
|
+
display_name: 'Unified Search',
|
|
6
|
+
description: 'Composite node type that orchestrates multiple search modalities (full-text search, BM25, embeddings, trigram) on a single table. Configures per-table search score weights, normalization strategy, and recency boost via the @searchConfig smart tag.',
|
|
7
|
+
parameter_schema: {
|
|
8
|
+
type: 'object',
|
|
9
|
+
properties: {
|
|
10
|
+
full_text_search: {
|
|
11
|
+
type: 'object',
|
|
12
|
+
description: 'SearchFullText parameters. Omit to skip FTS setup.',
|
|
13
|
+
properties: {
|
|
14
|
+
field_name: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
format: 'column-ref',
|
|
17
|
+
default: 'search'
|
|
18
|
+
},
|
|
19
|
+
source_fields: {
|
|
20
|
+
type: 'array',
|
|
21
|
+
items: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
field: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
format: 'column-ref'
|
|
25
27
|
},
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
weight: {
|
|
29
|
+
type: 'string',
|
|
30
|
+
enum: [
|
|
31
|
+
'A',
|
|
32
|
+
'B',
|
|
33
|
+
'C',
|
|
34
|
+
'D'
|
|
33
35
|
]
|
|
34
36
|
},
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
lang: {
|
|
38
|
+
type: 'string'
|
|
37
39
|
}
|
|
38
40
|
},
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
required: [
|
|
42
|
+
'field'
|
|
41
43
|
]
|
|
42
44
|
}
|
|
43
45
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
search_score_weight: {
|
|
47
|
+
type: 'number',
|
|
48
|
+
default: 1
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
51
|
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
bm25: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
description: 'SearchBm25 parameters. Omit to skip BM25 setup.',
|
|
55
|
+
properties: {
|
|
56
|
+
field_name: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
format: 'column-ref'
|
|
59
|
+
},
|
|
60
|
+
text_config: {
|
|
61
|
+
type: 'string',
|
|
62
|
+
default: 'english'
|
|
63
|
+
},
|
|
64
|
+
k1: {
|
|
65
|
+
type: 'number'
|
|
66
|
+
},
|
|
67
|
+
b: {
|
|
68
|
+
type: 'number'
|
|
69
|
+
},
|
|
70
|
+
search_score_weight: {
|
|
71
|
+
type: 'number',
|
|
72
|
+
default: 1
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
},
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
76
|
+
embedding: {
|
|
77
|
+
type: 'object',
|
|
78
|
+
description: 'SearchVector parameters. Omit to skip embedding setup.',
|
|
79
|
+
properties: {
|
|
80
|
+
field_name: {
|
|
81
|
+
type: 'string',
|
|
82
|
+
format: 'column-ref',
|
|
83
|
+
default: 'embedding'
|
|
84
|
+
},
|
|
85
|
+
dimensions: {
|
|
86
|
+
type: 'integer',
|
|
87
|
+
default: 768
|
|
88
|
+
},
|
|
89
|
+
index_method: {
|
|
90
|
+
type: 'string',
|
|
91
|
+
enum: [
|
|
92
|
+
'hnsw',
|
|
93
|
+
'ivfflat'
|
|
90
94
|
]
|
|
91
95
|
},
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
metric: {
|
|
97
|
+
type: 'string',
|
|
98
|
+
enum: [
|
|
99
|
+
'cosine',
|
|
100
|
+
'l2',
|
|
101
|
+
'ip'
|
|
98
102
|
]
|
|
99
103
|
},
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
source_fields: {
|
|
105
|
+
type: 'array',
|
|
106
|
+
items: {
|
|
107
|
+
type: 'string',
|
|
108
|
+
format: 'column-ref'
|
|
104
109
|
}
|
|
105
110
|
},
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
},
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
111
|
+
search_score_weight: {
|
|
112
|
+
type: 'number',
|
|
113
|
+
default: 1
|
|
114
|
+
},
|
|
115
|
+
chunks: {
|
|
116
|
+
type: 'object',
|
|
117
|
+
description: 'Chunking configuration for long-text embedding. Creates an embedding_chunks record that drives automatic text splitting and per-chunk embedding. Omit to skip chunking.',
|
|
118
|
+
properties: {
|
|
119
|
+
content_field_name: {
|
|
120
|
+
type: 'string',
|
|
121
|
+
format: 'column-ref',
|
|
122
|
+
description: 'Name of the text content column in the chunks table',
|
|
123
|
+
default: 'content'
|
|
118
124
|
},
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
125
|
+
chunk_size: {
|
|
126
|
+
type: 'integer',
|
|
127
|
+
description: 'Maximum number of characters per chunk',
|
|
128
|
+
default: 1000
|
|
123
129
|
},
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
chunk_overlap: {
|
|
131
|
+
type: 'integer',
|
|
132
|
+
description: 'Number of overlapping characters between consecutive chunks',
|
|
133
|
+
default: 200
|
|
128
134
|
},
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
135
|
+
chunk_strategy: {
|
|
136
|
+
type: 'string',
|
|
137
|
+
enum: [
|
|
138
|
+
'fixed',
|
|
139
|
+
'sentence',
|
|
140
|
+
'paragraph',
|
|
141
|
+
'semantic'
|
|
136
142
|
],
|
|
137
|
-
|
|
138
|
-
|
|
143
|
+
description: 'Strategy for splitting text into chunks',
|
|
144
|
+
default: 'fixed'
|
|
139
145
|
},
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
146
|
+
metadata_fields: {
|
|
147
|
+
type: 'object',
|
|
148
|
+
description: 'Metadata fields from parent to copy into chunks'
|
|
143
149
|
},
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
150
|
+
enqueue_chunking_job: {
|
|
151
|
+
type: 'boolean',
|
|
152
|
+
description: 'Whether to auto-enqueue a chunking job on insert/update',
|
|
153
|
+
default: true
|
|
148
154
|
},
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
155
|
+
chunking_task_name: {
|
|
156
|
+
type: 'string',
|
|
157
|
+
description: 'Task identifier for the chunking job queue',
|
|
158
|
+
default: 'generate_chunks'
|
|
153
159
|
}
|
|
154
160
|
}
|
|
155
161
|
}
|
|
156
162
|
}
|
|
157
163
|
},
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
164
|
+
trgm_fields: {
|
|
165
|
+
type: 'array',
|
|
166
|
+
items: {
|
|
167
|
+
type: 'string',
|
|
168
|
+
format: 'column-ref'
|
|
162
169
|
},
|
|
163
|
-
|
|
170
|
+
description: 'Field names to tag with @trgmSearch for fuzzy/typo-tolerant matching'
|
|
164
171
|
},
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
},
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
172
|
+
search_config: {
|
|
173
|
+
type: 'object',
|
|
174
|
+
description: 'Unified search score configuration written to @searchConfig smart tag',
|
|
175
|
+
properties: {
|
|
176
|
+
weights: {
|
|
177
|
+
type: 'object',
|
|
178
|
+
description: 'Per-algorithm weights: {tsv: 1.5, bm25: 1.0, pgvector: 0.8, trgm: 0.3}'
|
|
179
|
+
},
|
|
180
|
+
normalization: {
|
|
181
|
+
type: 'string',
|
|
182
|
+
enum: [
|
|
183
|
+
'linear',
|
|
184
|
+
'sigmoid'
|
|
178
185
|
],
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
},
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
},
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
186
|
+
description: 'Score normalization strategy',
|
|
187
|
+
default: 'linear'
|
|
188
|
+
},
|
|
189
|
+
boost_recent: {
|
|
190
|
+
type: 'boolean',
|
|
191
|
+
description: 'Enable recency boost for search results',
|
|
192
|
+
default: false
|
|
193
|
+
},
|
|
194
|
+
boost_recency_field: {
|
|
195
|
+
type: 'string',
|
|
196
|
+
format: 'column-ref',
|
|
197
|
+
description: 'Timestamp field for recency boost (e.g. created_at, updated_at)'
|
|
198
|
+
},
|
|
199
|
+
boost_recency_decay: {
|
|
200
|
+
type: 'number',
|
|
201
|
+
description: 'Decay rate for recency boost (0-1, lower = faster decay)',
|
|
202
|
+
default: 0.5
|
|
195
203
|
}
|
|
196
204
|
}
|
|
197
205
|
}
|
|
198
206
|
}
|
|
199
207
|
},
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
208
|
+
tags: [
|
|
209
|
+
'search',
|
|
210
|
+
'composite',
|
|
211
|
+
'schema'
|
|
204
212
|
]
|
|
205
213
|
};
|