Repository navigation
Conversation
The dashboard gains a Search page that queries any index through the Azure SDK rather than the searcher directly, so it shows exactly what an application would get. It covers query type (including semantic), search mode, $filter, $orderby, $select, search fields, facets, highlighting, scoring profiles, $top and $count, and renders results as cards with scores, highlights, captions, answers and facets. Request and Response tabs show the raw HTTP exchange the SDK made, with server-side JSON syntax highlighting. The SDK only accepts https endpoints, so it is handed one and its transport rewrites each request onto whichever binding Kestrel reports, over loopback with certificate validation skipped. The exchange is recorded by a pipeline policy so the headers are the ones the SDK sent. Two bugs surfaced along the way: - GET /indexes threw on $select, because [EnableQuery] treated the repository's IAsyncEnumerable as a single entity. The SDK's GetIndexNamesAsync sends $select=name, so it failed outright. - The Docker image shipped without blazor.web.js. The SDK only restores the package carrying it when it sees .razor files, and the Dockerfile restores from the project file alone. The dashboard prerendered but never went interactive. RequiresAspNetWebAssets is now set explicitly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #92.
Adds a Search page to the dashboard (
/search, linked from a new Status / Search switcher in the header). It queries any index through the Azure SDK — not the searcher directly — so what it shows is what an application would get.What the page does
$filter,$orderby,$select, search fields, facets, highlight fields, scoring profile,$top,$count. Choosing an index searches it immediately; the index and query are kept in the address bar so a reload or shared link returns to the same search.[1536 numbers].How it reaches the emulator
The SDK rejects any non-https endpoint, which the default plain-HTTP binding can't satisfy. So
EmulatorClientFactoryhands the SDK an https URI and its transport rewrites each request onto whichever binding Kestrel reports (wildcards mapped to loopback), skipping certificate validation for that in-process hop. This works behind the container's port mapping and Aspire's proxy, where the browser's URL isn't reachable from inside the process.HttpExchangeRecorderis an SDK pipeline policy, so the recorded headers are the ones the SDK actually sent.JSON highlighting is done server-side in
JsonHighlighter, keeping the dashboard free of client-side assets beyond Blazor's own script.Bugs fixed along the way
GET /indexes?$select=namereturned 500.[EnableQuery]treated the repository'sIAsyncEnumerableas a single entity, soSearchIndexClient.GetIndexNamesAsyncfailed against the emulator. The listing is now materialized into anIQueryable.blazor.web.js. The SDK only restores the package carrying it when it sees.razorfiles at restore time, and the Dockerfile restores from the project file alone. The dashboard prerendered but never became interactive (its auto-refresh never ran).RequiresAspNetWebAssetsis now set explicitly in the project.Other changes
Azure.Search.Documents12.0.0 (the version the tests already use).Not included
extractive; there's no separatesemanticQueryfield, and no vector/hybrid inputs.intervalfacets come back from the emulator as ranges ({"from":4,"to":6}) rather than Azure's value buckets ({"value":4}). The page shows what the emulator returns; that's a separate fidelity issue.Testing
SearchPageTestsfor loopback address resolution, list/facet splitting,SearchOptionsmapping, the JSON tokenizer, highlight encoding, and value formatting./searchis served,blazor.web.jsis served by the built image (fails before the project change), andGetIndexNamesAsynclists a created index.🤖 Generated with Claude Code