@sebspark/opensearch 0.2.0 → 0.2.1
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 +5 -2
- package/dist/index.d.ts +5 -2
- 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;
|
|
@@ -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;
|
|
@@ -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.1",
|
|
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
|
}
|