(typesense) Suggester

This commit is contained in:
2023-09-23 00:21:15 +02:00
parent b789c925c4
commit 20f4fdbd39

View File

@@ -22,6 +22,7 @@ export class TsService {
protected static readonly ACTION_COUNT = "/_count";
protected tsUrl = "http://localhost:8108/collections";
protected tsUrlPure = "http://localhost:8108/";
protected headers = new HttpHeaders({
"Content-Type": "application/json",
"X-TYPESENSE-API-KEY": "toto",
@@ -300,37 +301,34 @@ export class TsService {
}
getSuggest(text: string): Observable<Suggested[]> {
let queryParameters = new HttpParams();
queryParameters = queryParameters.append("query_by", "Name");
queryParameters = queryParameters.append(
"sort_by",
"_text_match:desc,Play Count:desc"
);
queryParameters = queryParameters.append("limit", 5);
console.log("search sugget: " + text);
return this.http
.post<any>(
this.tsUrl + TsService.SUGGEST_INDEX_NAME + TsService.ACTION_SEARCH,
this.tsUrlPure + "multi_search",
JSON.stringify({
_source: ["album", "artist"],
suggest: {
"album-suggest": {
prefix: text,
completion: {
field: "album_suggest",
},
},
"artist-suggest": {
prefix: text,
completion: {
field: "artist_suggest",
},
searches: [
{
collection: "albums",
q: text,
},
{
collection: "artists",
q: text,
},
],
}),
{ headers: this.headers }
{ headers: this.headers, params: queryParameters }
)
.pipe(
map((res) =>
this.responseSuggesterToSuggested(
res,
"album-suggest",
"artist-suggest"
)
),
map((res) => this.responseSuggesterToSuggested(res)),
catchError((error) =>
this.handleError(error, "getSuggest(" + text + ")")
)
@@ -410,21 +408,21 @@ export class TsService {
return result;
}
protected responseSuggesterToSuggested(
res: any,
...suggestName: string[]
): Suggested[] {
const result: Array<Suggested> = [];
suggestName.forEach((sname) => {
res["suggest"][sname][0]["options"].forEach((option) => {
let suggest = new Suggested();
// TODO If more than one key, raise exception
suggest.type = String(Object.keys(option["_source"]));
suggest.name = option["_source"][suggest.type];
result.push(suggest);
protected responseSuggesterToSuggested(res: any): Suggested[] {
const suggesteds: Array<Suggested> = [];
res.results.forEach((result) => {
let type = result.request_params.collection_name;
type = type.slice(0, type.length - 1);
result.hits.forEach((hit) => {
let suggested = new Suggested();
suggested.type = type;
suggested.name = hit.document.Name;
suggesteds.push(suggested);
});
});
return result;
return suggesteds;
}
protected handleError(error: any, origin: string): Promise<any> {