@sebspark/opensearch 0.2.0 → 0.2.2
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/dist/index.d.mts +8 -5
- package/dist/index.d.ts +8 -5
- package/dist/index.js +84 -1
- package/dist/index.mjs +84 -1
- package/package.json +4 -2
package/dist/index.d.mts
CHANGED
|
@@ -77,14 +77,14 @@ type Regexp<T> = {
|
|
|
77
77
|
type StandardAnalyzer = 'standard' | 'simple' | 'whitespace' | 'stop' | 'keyword' | 'pattern' | 'fingerprint';
|
|
78
78
|
type LanguageAnalyzer = 'arabic' | 'armenian' | 'basque' | 'bengali' | 'brazilian' | 'bulgarian' | 'catalan' | 'czech' | 'danish' | 'dutch' | 'english' | 'estonian' | 'finnish' | 'french' | 'galician' | 'german' | 'greek' | 'hindi' | 'hungarian' | 'indonesian' | 'irish' | 'italian' | 'latvian' | 'lithuanian' | 'norwegian' | 'persian' | 'portuguese' | 'romanian' | 'russian' | 'sorani' | 'spanish' | 'swedish' | 'turkish' | 'thai';
|
|
79
79
|
type Analyzer = StandardAnalyzer | LanguageAnalyzer;
|
|
80
|
-
type Match<T> = {
|
|
80
|
+
type Match<T> = Partial<{
|
|
81
81
|
[P in NestedStringPaths<T>]: string | {
|
|
82
82
|
query: string;
|
|
83
83
|
operator?: 'and' | 'or';
|
|
84
84
|
minimum_should_match?: number;
|
|
85
85
|
analyzer?: Analyzer;
|
|
86
86
|
};
|
|
87
|
-
}
|
|
87
|
+
}>;
|
|
88
88
|
type MultiMatchParam<T extends string> = T | `${T}^${number}` | `${SubstringOf<T>}*`;
|
|
89
89
|
type MultiMatch<T> = {
|
|
90
90
|
query: string;
|
|
@@ -114,7 +114,7 @@ type OpenSearchFilter<T> = {
|
|
|
114
114
|
exists?: Exists<T>;
|
|
115
115
|
fuzzy?: Fuzzy<T>;
|
|
116
116
|
prefix?: Partial<NestedFields<T>>;
|
|
117
|
-
wildcard?:
|
|
117
|
+
wildcard?: Wildcard<T>;
|
|
118
118
|
regexp?: Regexp<T>;
|
|
119
119
|
match?: Match<T>;
|
|
120
120
|
match_phrase?: Partial<NestedFields<T>>;
|
|
@@ -152,8 +152,8 @@ type Prefix<T> = {
|
|
|
152
152
|
};
|
|
153
153
|
};
|
|
154
154
|
type Wildcard<T> = {
|
|
155
|
-
[P in
|
|
156
|
-
value:
|
|
155
|
+
[P in NestedPaths<T>]?: string | {
|
|
156
|
+
value: string;
|
|
157
157
|
boost?: number;
|
|
158
158
|
};
|
|
159
159
|
};
|
|
@@ -203,6 +203,9 @@ type OpenSearchQueryBody<T extends {
|
|
|
203
203
|
fields?: OpenSearchFields<K>;
|
|
204
204
|
filter?: OpenSearchFilter<T>;
|
|
205
205
|
match?: Match<T>;
|
|
206
|
+
match_all?: {
|
|
207
|
+
boost?: number;
|
|
208
|
+
};
|
|
206
209
|
multi_match?: MultiMatch<T>;
|
|
207
210
|
from?: number;
|
|
208
211
|
size?: number;
|
package/dist/index.d.ts
CHANGED
|
@@ -77,14 +77,14 @@ type Regexp<T> = {
|
|
|
77
77
|
type StandardAnalyzer = 'standard' | 'simple' | 'whitespace' | 'stop' | 'keyword' | 'pattern' | 'fingerprint';
|
|
78
78
|
type LanguageAnalyzer = 'arabic' | 'armenian' | 'basque' | 'bengali' | 'brazilian' | 'bulgarian' | 'catalan' | 'czech' | 'danish' | 'dutch' | 'english' | 'estonian' | 'finnish' | 'french' | 'galician' | 'german' | 'greek' | 'hindi' | 'hungarian' | 'indonesian' | 'irish' | 'italian' | 'latvian' | 'lithuanian' | 'norwegian' | 'persian' | 'portuguese' | 'romanian' | 'russian' | 'sorani' | 'spanish' | 'swedish' | 'turkish' | 'thai';
|
|
79
79
|
type Analyzer = StandardAnalyzer | LanguageAnalyzer;
|
|
80
|
-
type Match<T> = {
|
|
80
|
+
type Match<T> = Partial<{
|
|
81
81
|
[P in NestedStringPaths<T>]: string | {
|
|
82
82
|
query: string;
|
|
83
83
|
operator?: 'and' | 'or';
|
|
84
84
|
minimum_should_match?: number;
|
|
85
85
|
analyzer?: Analyzer;
|
|
86
86
|
};
|
|
87
|
-
}
|
|
87
|
+
}>;
|
|
88
88
|
type MultiMatchParam<T extends string> = T | `${T}^${number}` | `${SubstringOf<T>}*`;
|
|
89
89
|
type MultiMatch<T> = {
|
|
90
90
|
query: string;
|
|
@@ -114,7 +114,7 @@ type OpenSearchFilter<T> = {
|
|
|
114
114
|
exists?: Exists<T>;
|
|
115
115
|
fuzzy?: Fuzzy<T>;
|
|
116
116
|
prefix?: Partial<NestedFields<T>>;
|
|
117
|
-
wildcard?:
|
|
117
|
+
wildcard?: Wildcard<T>;
|
|
118
118
|
regexp?: Regexp<T>;
|
|
119
119
|
match?: Match<T>;
|
|
120
120
|
match_phrase?: Partial<NestedFields<T>>;
|
|
@@ -152,8 +152,8 @@ type Prefix<T> = {
|
|
|
152
152
|
};
|
|
153
153
|
};
|
|
154
154
|
type Wildcard<T> = {
|
|
155
|
-
[P in
|
|
156
|
-
value:
|
|
155
|
+
[P in NestedPaths<T>]?: string | {
|
|
156
|
+
value: string;
|
|
157
157
|
boost?: number;
|
|
158
158
|
};
|
|
159
159
|
};
|
|
@@ -203,6 +203,9 @@ type OpenSearchQueryBody<T extends {
|
|
|
203
203
|
fields?: OpenSearchFields<K>;
|
|
204
204
|
filter?: OpenSearchFilter<T>;
|
|
205
205
|
match?: Match<T>;
|
|
206
|
+
match_all?: {
|
|
207
|
+
boost?: number;
|
|
208
|
+
};
|
|
206
209
|
multi_match?: MultiMatch<T>;
|
|
207
210
|
from?: number;
|
|
208
211
|
size?: number;
|
package/dist/index.js
CHANGED
|
@@ -36,9 +36,92 @@ module.exports = __toCommonJS(src_exports);
|
|
|
36
36
|
|
|
37
37
|
// src/openSearchHelper.ts
|
|
38
38
|
var import_assert = __toESM(require("assert"));
|
|
39
|
+
|
|
40
|
+
// src/fixIds.ts
|
|
41
|
+
var import_omit = __toESM(require("omit"));
|
|
42
|
+
var omitId = (0, import_omit.default)("id");
|
|
43
|
+
var fixIds = (searchQuery) => {
|
|
44
|
+
const q = searchQuery.body.query;
|
|
45
|
+
const body = {
|
|
46
|
+
query: {
|
|
47
|
+
bool: q.bool ? fixBool(q.bool) : void 0,
|
|
48
|
+
match: q.match ? fixId(q.match) : void 0,
|
|
49
|
+
collapse: q.collapse,
|
|
50
|
+
exists: q.exists ? fixExists(q.exists) : void 0,
|
|
51
|
+
fields: q.fields,
|
|
52
|
+
filter: q.filter ? fixFilter(q.filter) : void 0,
|
|
53
|
+
from: q.from,
|
|
54
|
+
fuzzy: q.fuzzy ? fixId(q.fuzzy) : void 0,
|
|
55
|
+
highlight: q.highlight,
|
|
56
|
+
match_all: q.match_all,
|
|
57
|
+
match_phrase: q.match_phrase ? fixId(q.match_phrase) : void 0,
|
|
58
|
+
match_phrase_prefix: q.match_phrase_prefix ? fixId(q.match_phrase_prefix) : void 0,
|
|
59
|
+
more_like_this: q.more_like_this ? fixWithFields(q.more_like_this) : void 0,
|
|
60
|
+
multi_match: q.multi_match ? fixId(q.multi_match) : void 0,
|
|
61
|
+
prefix: q.prefix ? fixId(q.prefix) : void 0,
|
|
62
|
+
range: q.range ? fixId(q.range) : void 0,
|
|
63
|
+
regexp: q.regexp ? fixId(q.regexp) : void 0,
|
|
64
|
+
script_score: q.script_score,
|
|
65
|
+
size: q.size,
|
|
66
|
+
term: q.term ? fixId(q.term) : void 0,
|
|
67
|
+
terms: q.terms ? fixId(q.terms) : void 0,
|
|
68
|
+
wildcard: q.wildcard ? fixId(q.wildcard) : void 0
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
...searchQuery,
|
|
73
|
+
body: {
|
|
74
|
+
...clean(body)
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
var fixBool = (bool) => ({
|
|
79
|
+
...bool,
|
|
80
|
+
filter: bool.filter ? Array.isArray(bool.filter) ? bool.filter.map(fixFilter) : fixFilter(bool.filter) : void 0,
|
|
81
|
+
boost: bool.boost,
|
|
82
|
+
minimum_should_match: bool.minimum_should_match,
|
|
83
|
+
must: bool.must ? Array.isArray(bool.must) ? bool.must.map(fixFilter) : fixFilter(bool.must) : void 0,
|
|
84
|
+
must_not: bool.must_not ? Array.isArray(bool.must_not) ? bool.must_not.map(fixFilter) : fixFilter(bool.must_not) : void 0,
|
|
85
|
+
should: bool.should ? Array.isArray(bool.should) ? bool.should.map(fixFilter) : fixFilter(bool.should) : void 0
|
|
86
|
+
});
|
|
87
|
+
var fixFilter = (filter) => clean({
|
|
88
|
+
bool: filter.bool ? fixBool(filter.bool) : void 0,
|
|
89
|
+
exists: filter.exists ? fixExists(filter.exists) : void 0,
|
|
90
|
+
fuzzy: filter.fuzzy ? fixId(filter.fuzzy) : void 0,
|
|
91
|
+
match: filter.match ? fixId(filter.match) : void 0,
|
|
92
|
+
match_phrase: filter.match_phrase ? fixId(filter.match_phrase) : void 0,
|
|
93
|
+
multi_match: filter.multi_match ? fixId(filter.multi_match) : void 0,
|
|
94
|
+
match_phrase_prefix: filter.match_phrase_prefix ? fixId(filter.match_phrase_prefix) : void 0,
|
|
95
|
+
prefix: filter.prefix ? fixId(filter.prefix) : void 0,
|
|
96
|
+
query_string: filter.query_string ? fixWithFields(filter.query_string) : void 0,
|
|
97
|
+
range: filter.range ? fixId(filter.range) : void 0,
|
|
98
|
+
regexp: filter.regexp ? fixId(filter.regexp) : void 0,
|
|
99
|
+
simple_query_string: filter.simple_query_string ? fixWithFields(filter.simple_query_string) : void 0,
|
|
100
|
+
term: filter.term ? fixId(filter.term) : void 0,
|
|
101
|
+
terms: filter.terms ? fixId(filter.terms) : void 0,
|
|
102
|
+
wildcard: filter.wildcard ? fixId(filter.wildcard) : void 0
|
|
103
|
+
});
|
|
104
|
+
var fixWithFields = (old) => ({
|
|
105
|
+
...old,
|
|
106
|
+
fields: old.fields ? old.fields.map(fixIdValue) : void 0
|
|
107
|
+
});
|
|
108
|
+
var fixExists = (exists) => ({
|
|
109
|
+
...exists,
|
|
110
|
+
field: fixIdValue(exists.field)
|
|
111
|
+
});
|
|
112
|
+
var fixId = (old) => {
|
|
113
|
+
const fixed = omitId(old);
|
|
114
|
+
if (old.id)
|
|
115
|
+
fixed._id = old.id;
|
|
116
|
+
return fixed;
|
|
117
|
+
};
|
|
118
|
+
var fixIdValue = (val) => val === "id" ? "_id" : val;
|
|
119
|
+
var clean = (obj) => Object.entries(obj).filter(([, val]) => val !== void 0).reduce((m, [prop, val]) => ({ ...m, [prop]: val }), {});
|
|
120
|
+
|
|
121
|
+
// src/openSearchHelper.ts
|
|
39
122
|
var typedSearch = async (client, searchQuery) => {
|
|
40
123
|
const response = await client.search(
|
|
41
|
-
searchQuery
|
|
124
|
+
fixIds(searchQuery)
|
|
42
125
|
);
|
|
43
126
|
const results = response.body.hits.hits.map(
|
|
44
127
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,91 @@
|
|
|
1
1
|
// src/openSearchHelper.ts
|
|
2
2
|
import assert from "assert";
|
|
3
|
+
|
|
4
|
+
// src/fixIds.ts
|
|
5
|
+
import omit from "omit";
|
|
6
|
+
var omitId = omit("id");
|
|
7
|
+
var fixIds = (searchQuery) => {
|
|
8
|
+
const q = searchQuery.body.query;
|
|
9
|
+
const body = {
|
|
10
|
+
query: {
|
|
11
|
+
bool: q.bool ? fixBool(q.bool) : void 0,
|
|
12
|
+
match: q.match ? fixId(q.match) : void 0,
|
|
13
|
+
collapse: q.collapse,
|
|
14
|
+
exists: q.exists ? fixExists(q.exists) : void 0,
|
|
15
|
+
fields: q.fields,
|
|
16
|
+
filter: q.filter ? fixFilter(q.filter) : void 0,
|
|
17
|
+
from: q.from,
|
|
18
|
+
fuzzy: q.fuzzy ? fixId(q.fuzzy) : void 0,
|
|
19
|
+
highlight: q.highlight,
|
|
20
|
+
match_all: q.match_all,
|
|
21
|
+
match_phrase: q.match_phrase ? fixId(q.match_phrase) : void 0,
|
|
22
|
+
match_phrase_prefix: q.match_phrase_prefix ? fixId(q.match_phrase_prefix) : void 0,
|
|
23
|
+
more_like_this: q.more_like_this ? fixWithFields(q.more_like_this) : void 0,
|
|
24
|
+
multi_match: q.multi_match ? fixId(q.multi_match) : void 0,
|
|
25
|
+
prefix: q.prefix ? fixId(q.prefix) : void 0,
|
|
26
|
+
range: q.range ? fixId(q.range) : void 0,
|
|
27
|
+
regexp: q.regexp ? fixId(q.regexp) : void 0,
|
|
28
|
+
script_score: q.script_score,
|
|
29
|
+
size: q.size,
|
|
30
|
+
term: q.term ? fixId(q.term) : void 0,
|
|
31
|
+
terms: q.terms ? fixId(q.terms) : void 0,
|
|
32
|
+
wildcard: q.wildcard ? fixId(q.wildcard) : void 0
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
...searchQuery,
|
|
37
|
+
body: {
|
|
38
|
+
...clean(body)
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
var fixBool = (bool) => ({
|
|
43
|
+
...bool,
|
|
44
|
+
filter: bool.filter ? Array.isArray(bool.filter) ? bool.filter.map(fixFilter) : fixFilter(bool.filter) : void 0,
|
|
45
|
+
boost: bool.boost,
|
|
46
|
+
minimum_should_match: bool.minimum_should_match,
|
|
47
|
+
must: bool.must ? Array.isArray(bool.must) ? bool.must.map(fixFilter) : fixFilter(bool.must) : void 0,
|
|
48
|
+
must_not: bool.must_not ? Array.isArray(bool.must_not) ? bool.must_not.map(fixFilter) : fixFilter(bool.must_not) : void 0,
|
|
49
|
+
should: bool.should ? Array.isArray(bool.should) ? bool.should.map(fixFilter) : fixFilter(bool.should) : void 0
|
|
50
|
+
});
|
|
51
|
+
var fixFilter = (filter) => clean({
|
|
52
|
+
bool: filter.bool ? fixBool(filter.bool) : void 0,
|
|
53
|
+
exists: filter.exists ? fixExists(filter.exists) : void 0,
|
|
54
|
+
fuzzy: filter.fuzzy ? fixId(filter.fuzzy) : void 0,
|
|
55
|
+
match: filter.match ? fixId(filter.match) : void 0,
|
|
56
|
+
match_phrase: filter.match_phrase ? fixId(filter.match_phrase) : void 0,
|
|
57
|
+
multi_match: filter.multi_match ? fixId(filter.multi_match) : void 0,
|
|
58
|
+
match_phrase_prefix: filter.match_phrase_prefix ? fixId(filter.match_phrase_prefix) : void 0,
|
|
59
|
+
prefix: filter.prefix ? fixId(filter.prefix) : void 0,
|
|
60
|
+
query_string: filter.query_string ? fixWithFields(filter.query_string) : void 0,
|
|
61
|
+
range: filter.range ? fixId(filter.range) : void 0,
|
|
62
|
+
regexp: filter.regexp ? fixId(filter.regexp) : void 0,
|
|
63
|
+
simple_query_string: filter.simple_query_string ? fixWithFields(filter.simple_query_string) : void 0,
|
|
64
|
+
term: filter.term ? fixId(filter.term) : void 0,
|
|
65
|
+
terms: filter.terms ? fixId(filter.terms) : void 0,
|
|
66
|
+
wildcard: filter.wildcard ? fixId(filter.wildcard) : void 0
|
|
67
|
+
});
|
|
68
|
+
var fixWithFields = (old) => ({
|
|
69
|
+
...old,
|
|
70
|
+
fields: old.fields ? old.fields.map(fixIdValue) : void 0
|
|
71
|
+
});
|
|
72
|
+
var fixExists = (exists) => ({
|
|
73
|
+
...exists,
|
|
74
|
+
field: fixIdValue(exists.field)
|
|
75
|
+
});
|
|
76
|
+
var fixId = (old) => {
|
|
77
|
+
const fixed = omitId(old);
|
|
78
|
+
if (old.id)
|
|
79
|
+
fixed._id = old.id;
|
|
80
|
+
return fixed;
|
|
81
|
+
};
|
|
82
|
+
var fixIdValue = (val) => val === "id" ? "_id" : val;
|
|
83
|
+
var clean = (obj) => Object.entries(obj).filter(([, val]) => val !== void 0).reduce((m, [prop, val]) => ({ ...m, [prop]: val }), {});
|
|
84
|
+
|
|
85
|
+
// src/openSearchHelper.ts
|
|
3
86
|
var typedSearch = async (client, searchQuery) => {
|
|
4
87
|
const response = await client.search(
|
|
5
|
-
searchQuery
|
|
88
|
+
fixIds(searchQuery)
|
|
6
89
|
);
|
|
7
90
|
const results = response.body.hits.hits.map(
|
|
8
91
|
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sebspark/opensearch",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -16,9 +16,11 @@
|
|
|
16
16
|
"typecheck": "vitest --typecheck.only --passWithNoTests"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
+
"@types/omit": "1.0.3",
|
|
19
20
|
"tsconfig": "*"
|
|
20
21
|
},
|
|
21
22
|
"dependencies": {
|
|
22
|
-
"@opensearch-project/opensearch": "2.
|
|
23
|
+
"@opensearch-project/opensearch": "2.5.0",
|
|
24
|
+
"omit": "1.0.1"
|
|
23
25
|
}
|
|
24
26
|
}
|