|
class FullTextSearchService { |
|
url = ""; |
|
constructor(url) { |
|
this.url = url; |
|
} |
|
async health() { |
|
const r = await fetch(`${this.url}/health`, { |
|
method: "GET", |
|
headers: { |
|
"Content-Type": "application/json" |
|
} |
|
}); |
|
const data = await r.json(); |
|
if (data.status === "ok") { |
|
return data.status; |
|
} |
|
return "unavailable"; |
|
} |
|
async search(query, { abortController }) { |
|
const r = await fetch(`${this.url}/search`, { |
|
method: "POST", |
|
headers: { |
|
"Content-Type": "application/json" |
|
}, |
|
body: JSON.stringify({ |
|
"query": query, |
|
"top": 10 |
|
}), |
|
signal: abortController.signal |
|
}); |
|
if (!r.ok) { |
|
throw new Error(`Failed to load search results: ${await r.text()}`); |
|
} |
|
const data = await r.json(); |
|
return data; |
|
} |
|
} |
|
|
|
export { FullTextSearchService as F }; |
|
|
|
|