(typesense) Suggester
This commit is contained in:
@@ -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> {
|
||||
|
||||
Reference in New Issue
Block a user