diff --git a/search_app.py b/search_app.py index da2d97e..1116dfc 100644 --- a/search_app.py +++ b/search_app.py @@ -746,6 +746,8 @@ def create_app(config: AppConfig = CONFIG) -> Flask: @app.route("/api/channels") def channels(): + include_external = request.args.get("external", default="0", type=str) + include_external = include_external.lower() not in {"0", "false", "no"} base_channels_body = { "size": 0, "aggs": { @@ -762,6 +764,10 @@ def create_app(config: AppConfig = CONFIG) -> Flask: } }, } + if not include_external: + base_channels_body["query"] = { + "bool": {"must_not": [{"term": {"external_reference": True}}]} + } def run_channels_request(field_name: str): body = json.loads(json.dumps(base_channels_body)) # deep copy @@ -920,7 +926,7 @@ def create_app(config: AppConfig = CONFIG) -> Flask: use_fuzzy = parse_flag("fuzzy", True) use_phrase = parse_flag("phrase", True) use_query_string = parse_flag("query_string", False) - include_external = parse_flag("external", True) + include_external = parse_flag("external", False) if use_query_string: use_exact = use_fuzzy = use_phrase = False @@ -1075,7 +1081,7 @@ def create_app(config: AppConfig = CONFIG) -> Flask: use_exact = parse_flag("exact", True) use_fuzzy = parse_flag("fuzzy", True) use_phrase = parse_flag("phrase", True) - include_external = parse_flag("external", True) + include_external = parse_flag("external", False) if use_query_string: use_exact = use_fuzzy = use_phrase = False diff --git a/static/app.js b/static/app.js index 328b2a1..9ba821c 100644 --- a/static/app.js +++ b/static/app.js @@ -141,7 +141,7 @@ fuzzyToggle.checked = parseBoolParam("fuzzy", true); phraseToggle.checked = parseBoolParam("phrase", true); if (externalToggle) { - externalToggle.checked = parseBoolParam("external", true); + externalToggle.checked = parseBoolParam("external", false); } queryToggle.checked = parseBoolParam("query_string", false); applyQueryMode(); @@ -281,7 +281,11 @@ }); if (!collected.length) return null; const escaped = collected.map((id) => `"${escapeQueryValue(id)}"`); - return `${field}:(${escaped.join(" OR ")})`; + const variants = field.endsWith(".keyword") + ? [field] + : [`${field}.keyword`, field]; + const clauses = variants.map((fname) => `${fname}:(${escaped.join(" OR ")})`); + return clauses.length > 1 ? `(${clauses.join(" OR ")})` : clauses[0]; } async function loadChannels() { @@ -290,7 +294,8 @@ return; } try { - const res = await fetch("/api/channels"); + const includeExternal = externalToggle ? externalToggle.checked : false; + const res = await fetch(`/api/channels?external=${includeExternal ? "1" : "0"}`); const data = await res.json(); channelMap.clear(); channelSelect.innerHTML = ''; @@ -1198,7 +1203,7 @@ async function updateFrequencyChart(term, channels, year, queryMode, toggles = { if (queryMode) { params.set("query_string", "1"); } - const { exact = true, fuzzy = true, phrase = true, external = true } = toggles || {}; + const { exact = true, fuzzy = true, phrase = true, external = false } = toggles || {}; params.set("exact", exact ? "1" : "0"); params.set("fuzzy", fuzzy ? "1" : "0"); params.set("phrase", phrase ? "1" : "0"); @@ -1529,7 +1534,7 @@ async function updateFrequencyChart(term, channels, year, queryMode, toggles = { let exact = !!exactToggle.checked; let fuzzy = !!fuzzyToggle.checked; let phrase = !!phraseToggle.checked; - const includeExternal = externalToggle ? externalToggle.checked : true; + const includeExternal = externalToggle ? externalToggle.checked : false; if (queryMode) { exact = false; fuzzy = false; @@ -1608,7 +1613,10 @@ async function updateFrequencyChart(term, channels, year, queryMode, toggles = { fuzzyToggle.addEventListener("change", () => { rememberToggleState(); runSearch(0); }); phraseToggle.addEventListener("change", () => { rememberToggleState(); runSearch(0); }); if (externalToggle) { - externalToggle.addEventListener("change", () => runSearch(0)); + externalToggle.addEventListener("change", () => { + pendingChannelSelection = ""; + loadChannels().then(() => runSearch(0)); + }); } if (queryToggle) { queryToggle.addEventListener("change", () => { applyQueryMode(); runSearch(0); }); diff --git a/static/index.html b/static/index.html index f237563..cc1d437 100644 --- a/static/index.html +++ b/static/index.html @@ -82,7 +82,7 @@