UNPKG

@kit-data-manager/react-search-component

Version:

All-in-one component for rendering an elastic search UI for searching anything. Built-in support for visualizing related items in a graph and resolving unique identifiers.

118 lines 4.27 kB
import { SearchConfigBuilder } from "../lib/config/SearchConfigBuilder"; export async function relatedItemsQuery(config, query) { const body = { query: { bool: { should: [ { multi_match: { fields: weighted(query.searchFields ?? [query.pidField ?? "pid"]), operator: "and", query: query.term, type: "best_fields" } }, { multi_match: { fields: weighted(query.searchFields ?? [query.pidField ?? "pid"]), query: query.term, type: "cross_fields" } }, { multi_match: { fields: weighted(query.searchFields ?? [query.pidField ?? "pid"]), query: query.term, type: "phrase" } }, { multi_match: { fields: weighted(query.searchFields ?? [query.pidField ?? "pid"]), query: query.term, type: "phrase_prefix" } } ] } }, size: query.amount }; const index = Array.isArray(query.index) ? query.index.join(",") : query.index; const res = await fetch(config.host + "/" + index + "/_search", { body: JSON.stringify(body), method: "POST", headers: { "Content-Type": "application/json", Authorization: `ApiKey ${config.apiKey}` } }); return (await res.json()); } export async function backgroundSearchQuery(config, query) { const builtConfig = new SearchConfigBuilder(config); const body = { query: { bool: { should: [ { multi_match: { fields: weighted(builtConfig.getSearchOptions().search_fields ?? "undefined"), operator: "and", query: query, type: "best_fields" } }, { multi_match: { fields: weighted(builtConfig.getSearchOptions().search_fields ?? "undefined"), query: query, type: "cross_fields" } }, { multi_match: { fields: weighted(builtConfig.getSearchOptions().search_fields ?? "undefined"), query: query, type: "phrase" } }, { multi_match: { fields: weighted(builtConfig.getSearchOptions().search_fields ?? "undefined"), query: query, type: "phrase_prefix" } } ] } }, size: 20 }; const index = Array.isArray(config.indices) ? config.indices.join(",") : config.indices; const res = await fetch(config.host + "/" + index + "/_search", { body: JSON.stringify(body), method: "POST", headers: { "Content-Type": "application/json", Authorization: `ApiKey ${config.apiKey}` } }); return (await res.json()); } function weighted(field) { if (Array.isArray(field)) { return field.map((field) => field + "^1"); } else if (typeof field === "object") { const fields = []; for (const [name, config] of Object.entries(field)) { fields.push(name + "^" + config.weight); } return fields; } else { return field + "^1"; } } //# sourceMappingURL=queries.js.map