@golemio/core 3.2.0-dev.2591250520 → 3.2.0-dev.2601914129
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/helpers/data-access/opensearch/OpenSearchSyncOrchestrator.js +1 -1
- package/dist/helpers/data-access/opensearch/OpenSearchSyncOrchestrator.js.map +1 -1
- package/dist/helpers/data-access/opensearch/czechAnalysis.d.ts +14 -0
- package/dist/helpers/data-access/opensearch/czechAnalysis.js +73 -0
- package/dist/helpers/data-access/opensearch/czechAnalysis.js.map +1 -0
- package/dist/helpers/data-access/opensearch/expandAcronyms.d.ts +1 -0
- package/dist/helpers/data-access/opensearch/expandAcronyms.js +19 -0
- package/dist/helpers/data-access/opensearch/expandAcronyms.js.map +1 -0
- package/dist/helpers/data-access/opensearch/index.d.ts +5 -1
- package/dist/helpers/data-access/opensearch/index.js +9 -5
- package/dist/helpers/data-access/opensearch/index.js.map +1 -1
- package/dist/helpers/data-access/opensearch/liveSearchQuery.d.ts +18 -0
- package/dist/helpers/data-access/opensearch/liveSearchQuery.js +41 -0
- package/dist/helpers/data-access/opensearch/liveSearchQuery.js.map +1 -0
- package/package.json +1 -1
- package/dist/helpers/data-access/opensearch/czechAnalyzer.d.ts +0 -6
- package/dist/helpers/data-access/opensearch/czechAnalyzer.js +0 -30
- package/dist/helpers/data-access/opensearch/czechAnalyzer.js.map +0 -1
|
@@ -47,7 +47,7 @@ class OpenSearchSyncOrchestrator {
|
|
|
47
47
|
}
|
|
48
48
|
catch (error) {
|
|
49
49
|
const wrappedError = new errors_1.RecoverableError(`initIndexes(${syncableIndex.baseName}) failed`, this.constructor.name, error);
|
|
50
|
-
this.logger.error(wrappedError
|
|
50
|
+
this.logger.error(wrappedError);
|
|
51
51
|
failed.push(syncableIndex.baseName);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenSearchSyncOrchestrator.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/OpenSearchSyncOrchestrator.ts"],"names":[],"mappings":";;;AACA,4CAAmD;AAInD,MAAa,0BAA0B;IAGnC,YACqB,iBAAoC,EACpC,eAAiC,EACjC,MAAe;QAFf,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,oBAAe,GAAf,eAAe,CAAkB;QACjC,WAAM,GAAN,MAAM,CAAS;QAL5B,cAAS,GAAG,KAAK,CAAC;QAQnB,YAAO,GAAG,KAAK,IAAmB,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;gBACrF,OAAO;aACV;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;gBACzF,OAAO;aACV;YACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI;gBACA,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE;oBAC9C,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;iBACvC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAI,CAAC,CAAC;aAC5F;oBAAS;gBACN,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;aACxD;QACL,CAAC,CAAC;IAxBC,CAAC;IA0BG,KAAK,CAAC,WAAW;QACpB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO;YAAE,OAAO;QAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,eAAe,EAAE;YAC9C,IAAI;gBACA,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;gBACxF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACzE,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,iBAAiB,EAAE;oBAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,+BAA+B,aAAa,CAAC,QAAQ,oBAAoB,KAAK,wBAAwB,CACzG,CAAC;oBACF,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;iBACvC;aACJ;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,YAAY,GAAG,IAAI,yBAAgB,CACrC,eAAe,aAAa,CAAC,QAAQ,UAAU,EAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,EACrB,KAAK,CACR,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"OpenSearchSyncOrchestrator.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/OpenSearchSyncOrchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Types } from "@opensearch-project/opensearch";
|
|
2
|
+
export interface ICzechAnalysisOptions {
|
|
3
|
+
synonyms?: string[];
|
|
4
|
+
edgeNgramMin?: number;
|
|
5
|
+
edgeNgramMax?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface IBaseIndexSettingsOptions extends ICzechAnalysisOptions {
|
|
8
|
+
numberOfShards?: number;
|
|
9
|
+
}
|
|
10
|
+
type Analysis = Types.Indices_Common.IndexSettingsAnalysis;
|
|
11
|
+
export declare const buildCzechAnalysis: (options?: ICzechAnalysisOptions) => Analysis;
|
|
12
|
+
export declare const buildBaseIndexSettings: (options?: IBaseIndexSettingsOptions) => Types.Indices_Common.IndexSettings;
|
|
13
|
+
export declare const czechText: () => Types.Common_Mapping.TextProperty;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.czechText = exports.buildBaseIndexSettings = exports.buildCzechAnalysis = void 0;
|
|
4
|
+
// Reusable Czech analysis recipe (holds no vocabulary; the caller passes synonyms in). czechText()
|
|
5
|
+
// maps each field via a hunspell lemma path (ranking) plus an edge_ngram ".prefix" sub-field
|
|
6
|
+
// (prefix/derivational recall), and — when `synonyms` is given — a query-time synonym_graph.
|
|
7
|
+
//
|
|
8
|
+
// hunspell needs the cs_CZ dictionary on every node, and the filter ordering below is load-bearing.
|
|
9
|
+
// Full rationale (paths, ordering trap, dependency caveat) lives in docs/opensearch-czech-search.md.
|
|
10
|
+
// Changing this analysis is a mapping change: existing indexes must be dropped, recreated, and reseeded.
|
|
11
|
+
const HUNSPELL_LOCALE = "cs_CZ";
|
|
12
|
+
const DEFAULT_EDGE_NGRAM_MIN = 2;
|
|
13
|
+
const DEFAULT_EDGE_NGRAM_MAX = 20;
|
|
14
|
+
const buildCzechAnalysis = (options = {}) => {
|
|
15
|
+
const synonyms = options.synonyms ?? [];
|
|
16
|
+
const edgeNgramMin = options.edgeNgramMin ?? DEFAULT_EDGE_NGRAM_MIN;
|
|
17
|
+
const edgeNgramMax = options.edgeNgramMax ?? DEFAULT_EDGE_NGRAM_MAX;
|
|
18
|
+
const hasSynonyms = synonyms.length > 0;
|
|
19
|
+
const filter = {
|
|
20
|
+
czech_stop: { type: "stop", stopwords: "_czech_" },
|
|
21
|
+
cs_hunspell: { type: "hunspell", locale: HUNSPELL_LOCALE, dedup: true },
|
|
22
|
+
cs_edge_ngram: { type: "edge_ngram", min_gram: edgeNgramMin, max_gram: edgeNgramMax },
|
|
23
|
+
};
|
|
24
|
+
if (hasSynonyms) {
|
|
25
|
+
// synonym_graph is search-time only; wired into cs_lemma_search, never an index-time analyzer.
|
|
26
|
+
filter.cs_synonym = { type: "synonym_graph", synonyms };
|
|
27
|
+
}
|
|
28
|
+
// Search-time twin of cs_lemma. cs_synonym must precede czech_stop or synonym_graph rejects
|
|
29
|
+
// multi-word entries with an inner stopword — see docs/opensearch-czech-search.md.
|
|
30
|
+
const lemmaSearchFilter = hasSynonyms
|
|
31
|
+
? ["lowercase", "cs_synonym", "czech_stop", "cs_hunspell", "asciifolding"]
|
|
32
|
+
: ["lowercase", "czech_stop", "cs_hunspell", "asciifolding"];
|
|
33
|
+
return {
|
|
34
|
+
filter,
|
|
35
|
+
analyzer: {
|
|
36
|
+
// asciifolding runs after hunspell so it still sees the diacritic-bearing form to look up.
|
|
37
|
+
cs_lemma: {
|
|
38
|
+
type: "custom",
|
|
39
|
+
tokenizer: "standard",
|
|
40
|
+
filter: ["lowercase", "czech_stop", "cs_hunspell", "asciifolding"],
|
|
41
|
+
},
|
|
42
|
+
cs_lemma_search: { type: "custom", tokenizer: "standard", filter: lemmaSearchFilter },
|
|
43
|
+
// Index side stores prefixes; query side matches the whole token against them (no ngram).
|
|
44
|
+
cs_prefix_index: { type: "custom", tokenizer: "standard", filter: ["lowercase", "asciifolding", "cs_edge_ngram"] },
|
|
45
|
+
cs_prefix_search: { type: "custom", tokenizer: "standard", filter: ["lowercase", "asciifolding"] },
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
exports.buildCzechAnalysis = buildCzechAnalysis;
|
|
50
|
+
// min_gram..max_gram spans more than the default allowed ngram diff of 1, so the index must raise
|
|
51
|
+
// max_ngram_diff or edge_ngram creation is rejected.
|
|
52
|
+
const buildBaseIndexSettings = (options = {}) => {
|
|
53
|
+
const edgeNgramMin = options.edgeNgramMin ?? DEFAULT_EDGE_NGRAM_MIN;
|
|
54
|
+
const edgeNgramMax = options.edgeNgramMax ?? DEFAULT_EDGE_NGRAM_MAX;
|
|
55
|
+
return {
|
|
56
|
+
number_of_shards: options.numberOfShards ?? 1,
|
|
57
|
+
max_ngram_diff: edgeNgramMax - edgeNgramMin,
|
|
58
|
+
analysis: (0, exports.buildCzechAnalysis)(options),
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
exports.buildBaseIndexSettings = buildBaseIndexSettings;
|
|
62
|
+
// Lemma field for ranking + a ".prefix" edge_ngram sub-field for derivational/prefix recall. The
|
|
63
|
+
// analyzer names match those produced by buildCzechAnalysis.
|
|
64
|
+
const czechText = () => ({
|
|
65
|
+
type: "text",
|
|
66
|
+
analyzer: "cs_lemma",
|
|
67
|
+
search_analyzer: "cs_lemma_search",
|
|
68
|
+
fields: {
|
|
69
|
+
prefix: { type: "text", analyzer: "cs_prefix_index", search_analyzer: "cs_prefix_search" },
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
exports.czechText = czechText;
|
|
73
|
+
//# sourceMappingURL=czechAnalysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"czechAnalysis.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/czechAnalysis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const expandAcronyms: (query: string, expansions: Record<string, string>) => string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.expandAcronyms = void 0;
|
|
4
|
+
// Appends the full form of every query token that is a known acronym, keeping the original tokens (so
|
|
5
|
+
// a literal-acronym match still fires) — forward-only and additive, never a substitution. `expansions`
|
|
6
|
+
// is the caller's lowercased acronym -> full-form map; matching is case-insensitive. Why this runs in
|
|
7
|
+
// the query layer (not as an index synonym) and why both forms are kept: docs/opensearch-czech-search.md.
|
|
8
|
+
const expandAcronyms = (query, expansions) => {
|
|
9
|
+
const matched = [];
|
|
10
|
+
for (const token of query.split(/\s+/)) {
|
|
11
|
+
const expansion = expansions[token.toLowerCase()];
|
|
12
|
+
if (expansion) {
|
|
13
|
+
matched.push(expansion);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return matched.length > 0 ? `${query} ${matched.join(" ")}` : query;
|
|
17
|
+
};
|
|
18
|
+
exports.expandAcronyms = expandAcronyms;
|
|
19
|
+
//# sourceMappingURL=expandAcronyms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expandAcronyms.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/expandAcronyms.ts"],"names":[],"mappings":";;;AAAA,sGAAsG;AACtG,uGAAuG;AACvG,sGAAsG;AACtG,0GAA0G;AACnG,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,UAAkC,EAAU,EAAE;IACxF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACpC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAClD,IAAI,SAAS,EAAE;YACX,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC3B;KACJ;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,CAAC,CAAC;AAVW,QAAA,cAAc,kBAUzB"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { buildCzechAnalysis, buildBaseIndexSettings, czechText } from "./czechAnalysis";
|
|
2
|
+
export type { ICzechAnalysisOptions, IBaseIndexSettingsOptions } from "./czechAnalysis";
|
|
3
|
+
export { expandAcronyms } from "./expandAcronyms";
|
|
4
|
+
export { buildLiveSearchQuery } from "./liveSearchQuery";
|
|
5
|
+
export type { ILiveSearchQueryOptions, IFuzzyOptions } from "./liveSearchQuery";
|
|
2
6
|
export { OpenSearchConnector } from "./OpenSearchConnector";
|
|
3
7
|
export type { IOpenSearchConnector } from "./IOpenSearchConnector";
|
|
4
8
|
export { OpenSearchService } from "./OpenSearchService";
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OpenSearchSyncOrchestrator = exports.OpenSearchService = exports.OpenSearchConnector = exports.czechText = exports.
|
|
4
|
-
var
|
|
5
|
-
Object.defineProperty(exports, "
|
|
6
|
-
Object.defineProperty(exports, "
|
|
7
|
-
Object.defineProperty(exports, "czechText", { enumerable: true, get: function () { return
|
|
3
|
+
exports.OpenSearchSyncOrchestrator = exports.OpenSearchService = exports.OpenSearchConnector = exports.buildLiveSearchQuery = exports.expandAcronyms = exports.czechText = exports.buildBaseIndexSettings = exports.buildCzechAnalysis = void 0;
|
|
4
|
+
var czechAnalysis_1 = require("./czechAnalysis");
|
|
5
|
+
Object.defineProperty(exports, "buildCzechAnalysis", { enumerable: true, get: function () { return czechAnalysis_1.buildCzechAnalysis; } });
|
|
6
|
+
Object.defineProperty(exports, "buildBaseIndexSettings", { enumerable: true, get: function () { return czechAnalysis_1.buildBaseIndexSettings; } });
|
|
7
|
+
Object.defineProperty(exports, "czechText", { enumerable: true, get: function () { return czechAnalysis_1.czechText; } });
|
|
8
|
+
var expandAcronyms_1 = require("./expandAcronyms");
|
|
9
|
+
Object.defineProperty(exports, "expandAcronyms", { enumerable: true, get: function () { return expandAcronyms_1.expandAcronyms; } });
|
|
10
|
+
var liveSearchQuery_1 = require("./liveSearchQuery");
|
|
11
|
+
Object.defineProperty(exports, "buildLiveSearchQuery", { enumerable: true, get: function () { return liveSearchQuery_1.buildLiveSearchQuery; } });
|
|
8
12
|
var OpenSearchConnector_1 = require("./OpenSearchConnector");
|
|
9
13
|
Object.defineProperty(exports, "OpenSearchConnector", { enumerable: true, get: function () { return OpenSearchConnector_1.OpenSearchConnector; } });
|
|
10
14
|
var OpenSearchService_1 = require("./OpenSearchService");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/index.ts"],"names":[],"mappings":";;;AAAA,iDAAwF;AAA/E,mHAAA,kBAAkB,OAAA;AAAE,uHAAA,sBAAsB,OAAA;AAAE,0GAAA,SAAS,OAAA;AAE9D,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,qDAAyD;AAAhD,uHAAA,oBAAoB,OAAA;AAE7B,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAE5B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAG1B,2EAA0E;AAAjE,wIAAA,0BAA0B,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { API, Types } from "@opensearch-project/opensearch";
|
|
2
|
+
type QueryContainer = Types.Common_QueryDsl.QueryContainer;
|
|
3
|
+
type SearchRequestBody = API.Search_RequestBody;
|
|
4
|
+
export interface IFuzzyOptions {
|
|
5
|
+
fields?: string[];
|
|
6
|
+
fuzziness?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ILiveSearchQueryOptions {
|
|
9
|
+
query: string;
|
|
10
|
+
fields: string[];
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
filter?: QueryContainer[];
|
|
14
|
+
wildcardFields?: string[];
|
|
15
|
+
fuzzy?: boolean | IFuzzyOptions;
|
|
16
|
+
}
|
|
17
|
+
export declare const buildLiveSearchQuery: (options: ILiveSearchQueryOptions) => SearchRequestBody;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildLiveSearchQuery = void 0;
|
|
4
|
+
const DEFAULT_SEARCH_LIMIT = 10;
|
|
5
|
+
const DEFAULT_FUZZINESS = "AUTO";
|
|
6
|
+
const PREFIX_SUBFIELD_SUFFIX = ".prefix";
|
|
7
|
+
const buildLiveSearchQuery = (options) => {
|
|
8
|
+
const trimmed = options.query.trim();
|
|
9
|
+
const bool = { filter: options.filter ?? [] };
|
|
10
|
+
if (!trimmed) {
|
|
11
|
+
bool.must = [{ match_all: {} }];
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const shoulds = [{ multi_match: { query: trimmed, fields: options.fields, type: "bool_prefix" } }];
|
|
15
|
+
const fuzzy = options.fuzzy ?? true;
|
|
16
|
+
if (fuzzy !== false) {
|
|
17
|
+
const fuzzyOptions = typeof fuzzy === "object" ? fuzzy : {};
|
|
18
|
+
const fuzzyFields = fuzzyOptions.fields ?? options.fields.filter((field) => !field.endsWith(PREFIX_SUBFIELD_SUFFIX));
|
|
19
|
+
shoulds.push({
|
|
20
|
+
multi_match: { query: trimmed, fields: fuzzyFields, fuzziness: fuzzyOptions.fuzziness ?? DEFAULT_FUZZINESS },
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
if (options.wildcardFields?.length) {
|
|
24
|
+
const escaped = trimmed.replace(/[\\*?]/g, "\\$&");
|
|
25
|
+
for (const field of options.wildcardFields) {
|
|
26
|
+
shoulds.push({ wildcard: { [field]: { value: `*${escaped}*`, case_insensitive: true } } });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
bool.should = shoulds;
|
|
30
|
+
bool.minimum_should_match = 1;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
query: { bool },
|
|
34
|
+
_source: false,
|
|
35
|
+
from: options.offset ?? 0,
|
|
36
|
+
size: options.limit ?? DEFAULT_SEARCH_LIMIT,
|
|
37
|
+
track_total_hits: true,
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
exports.buildLiveSearchQuery = buildLiveSearchQuery;
|
|
41
|
+
//# sourceMappingURL=liveSearchQuery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liveSearchQuery.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/liveSearchQuery.ts"],"names":[],"mappings":";;;AAYA,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,sBAAsB,GAAG,SAAS,CAAC;AAuBlC,MAAM,oBAAoB,GAAG,CAAC,OAAgC,EAAqB,EAAE;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAc,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;IAEzD,IAAI,CAAC,OAAO,EAAE;QACV,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;KACnC;SAAM;QACH,MAAM,OAAO,GAAqB,CAAC,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;QAErH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,IAAI,KAAK,KAAK,KAAK,EAAE;YACjB,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACrH,OAAO,CAAC,IAAI,CAAC;gBACT,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,IAAI,iBAAiB,EAAE;aAC/G,CAAC,CAAC;SACN;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,cAAc,EAAE;gBACxC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,OAAO,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aAC9F;SACJ;QAED,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;KACjC;IAED,OAAO;QACH,KAAK,EAAE,EAAE,IAAI,EAAE;QACf,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;QACzB,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,oBAAoB;QAC3C,gBAAgB,EAAE,IAAI;KACzB,CAAC;AACN,CAAC,CAAC;AApCW,QAAA,oBAAoB,wBAoC/B"}
|
package/package.json
CHANGED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Types } from "@opensearch-project/opensearch";
|
|
2
|
-
export declare const czechAnalysis: {
|
|
3
|
-
analysis: Types.Indices_Common.IndexSettingsAnalysis;
|
|
4
|
-
};
|
|
5
|
-
export declare const defaultIndexSettings: Types.Indices_Common.IndexSettings;
|
|
6
|
-
export declare const czechText: () => Types.Common_Mapping.TextProperty;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.czechText = exports.defaultIndexSettings = exports.czechAnalysis = void 0;
|
|
4
|
-
exports.czechAnalysis = {
|
|
5
|
-
analysis: {
|
|
6
|
-
filter: {
|
|
7
|
-
czech_stop: { type: "stop", stopwords: "_czech_" },
|
|
8
|
-
czech_stem: { type: "stemmer", language: "czech" },
|
|
9
|
-
czech_ascii: { type: "asciifolding", preserve_original: true },
|
|
10
|
-
},
|
|
11
|
-
analyzer: {
|
|
12
|
-
czech_analyzer: {
|
|
13
|
-
type: "custom",
|
|
14
|
-
tokenizer: "standard",
|
|
15
|
-
// pořadí záleží: stemming musí být před asciifolding
|
|
16
|
-
filter: ["lowercase", "czech_stop", "czech_stem", "czech_ascii"],
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
exports.defaultIndexSettings = {
|
|
22
|
-
number_of_shards: 1,
|
|
23
|
-
...exports.czechAnalysis,
|
|
24
|
-
};
|
|
25
|
-
const czechText = () => ({
|
|
26
|
-
type: "text",
|
|
27
|
-
analyzer: "czech_analyzer",
|
|
28
|
-
});
|
|
29
|
-
exports.czechText = czechText;
|
|
30
|
-
//# sourceMappingURL=czechAnalyzer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"czechAnalyzer.js","sourceRoot":"","sources":["../../../../src/helpers/data-access/opensearch/czechAnalyzer.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAA6D;IACnF,QAAQ,EAAE;QACN,MAAM,EAAE;YACJ,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;YAClD,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;YAClD,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,iBAAiB,EAAE,IAAI,EAAE;SACjE;QACD,QAAQ,EAAE;YACN,cAAc,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,UAAU;gBACrB,qDAAqD;gBACrD,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC;aACnE;SACJ;KACJ;CACJ,CAAC;AAEW,QAAA,oBAAoB,GAAuC;IACpE,gBAAgB,EAAE,CAAC;IACnB,GAAG,qBAAa;CACnB,CAAC;AAEK,MAAM,SAAS,GAAG,GAAsC,EAAE,CAAC,CAAC;IAC/D,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,gBAAgB;CAC7B,CAAC,CAAC;AAHU,QAAA,SAAS,aAGnB"}
|