// public facetedSearchOPEN( // suggestion: Suggestion | string, // activeFilterCategories: ActiveFilterCategories, // openCore: string, // openHost: string, // start?: string, // Starting page // ): Observable { // // OpenSearch endpoint // const host = openHost; // const path = "/" + openCore + "/_search"; // const base = host + path; // // Constructing Filters Based on Active Filter Categories // const filters = Object.entries(activeFilterCategories).map(([category, values]) => { // if (category === "language" || category === "year") { // return { terms: { [category]: values } }; // } else { // return { terms: { [`${category}.keyword`]: values } }; // } // }); // console.log("filters:", filters); // // Determine search term and query fields based on the suggestion type // let query; // if (typeof suggestion === "string") { // If suggestion is a string, append a wildcard (*) for partial matches // const lowercaseTerm = suggestion.toLowerCase() // query = { // bool: { // should: [ // { match: { title: { query: suggestion, fuzziness: "AUTO", boost: 3 } } }, // { match: { author: { query: suggestion, fuzziness: "AUTO", boost: 2 } } }, // { match: { subjects: { query: suggestion, fuzziness: "AUTO", boost: 1 } } }, // { wildcard: { title: { value: `${lowercaseTerm}*`, boost: 3 } } }, // { wildcard: { author: { value: `${lowercaseTerm}*`, boost: 2 } } }, // { wildcard: { subjects: { value: `${lowercaseTerm}*`, boost: 1 } } } // ], // minimum_should_match: 1 // } // }; // } else if (suggestion instanceof Suggestion) { // If suggestion is a Suggestion object, form a specific query // query = { // match: { // [suggestion.type]: { // query: suggestion.value, // operator: 'and' // all the terms in the query must be present in the field e.g. if is a title, the complete title // } // } // }; // } // // Set default value for start if not provided // const startValue = start ? parseInt(start) : 0; // // console.log(activeFilterCategories); // // console.log("mainQuery:", mainQuery); // // Construct the body of the OpenSearch query // const body = { // query: { // bool: { // must: [ // mainQuery, // Ensure the main query must be satisfied // ...filters // Ensure all filters must be satisfied // ] // } // }, // // // WORKS // Expected: 12 results // // query: { // // bool: { // // "must": [ // // { "term": { "language": "en" } }, // // { "term": { "subjects.keyword": "Lower Austria" } }, // // { "term": { "subjects.keyword": "counting data" } } // // ], // // } // // }, // // // THIS WORKS: // Expected: 19 results // // query: { // // bool: { // // must: [ // // { "match": { "title": "Blatt" } }, // // { "term": { "subjects": "bayern" } } // // ], // // } // // }, // // // WORKS // Expected: 4 results // // query: { // // bool: { // // "must": [ // // { "match": { "title": "blatt" } }, // // { "term": { "subjects": "bayern" } }, // // { "term": { "subjects": "salzburg" } } // // ], // // } // // }, // // // WORKS // Expected: 2 results // // query: { // // bool: { // // "must": [ // // { "match": { "title": "blatt" } }, // // { "term": { "subjects": "ungarn" } }, // // { "term": { "subjects": "steiermark" } } // // ], // // } // // }, // // WORKS // Expected: 12 results // query: { // bool: { // "must": [ // { "term": { "language": "en" } }, // { "term": { "subjects.keyword": "Lower Austria" } }, // { "term": { "subjects.keyword": "counting data" } } // ], // "should": [ // { match: { title: { query: "halger", fuzziness: "AUTO", boost: 3 } } }, // { match: { author: { query: "halger", fuzziness: "AUTO", boost: 2 } } }, // { match: { subjects: { query: "halger", fuzziness: "AUTO", boost: 1 } } }, // { wildcard: { title: { value: "halger", boost: 3 } } }, // { wildcard: { author: { value: "halger", boost: 2 } } }, // { wildcard: { subjects: { value: "halger", boost: 1 } } } // ], // minimum_should_match: 1 // } // }, // size: 10, // from: startValue, // sort: [{ _score: { order: "desc" } }], // track_scores: true, // aggs: { // subjects: { terms: { field: "subjects.keyword", size: 1000 } }, // language: { terms: { field: "language" } }, // author: { terms: { field: "author.keyword", size: 1000 } }, // year: { terms: { field: "year", size: 100 } } // }, // highlight: { // fields: { // title: {}, // author: {}, // subjects: {} // } // } // }; // console.log("mainQuery:", mainQuery); // console.log("filters:", filters); // console.log("body:", body); // // Make API call to OpenSearch and return the result // const stations = api.post(base, body); // return stations; // }