<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Search on Backend Engineering Strategy Tools</title><link>https://backend-engineering-strategy-tools.github.io/site/tags/search/</link><description>Recent content in Search on Backend Engineering Strategy Tools</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 04 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://backend-engineering-strategy-tools.github.io/site/tags/search/index.xml" rel="self" type="application/rss+xml"/><item><title>Site Navigation — Beyond the Menu</title><link>https://backend-engineering-strategy-tools.github.io/site/thinking/site-navigation/</link><pubDate>Thu, 04 Jun 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/thinking/site-navigation/</guid><description>&lt;p&gt;A menu works when the content is shallow and the audience knows what they want. It breaks down when the content grows into something more like a knowledge base — when you have 80 notes across 12 sections and the useful thing is not finding a specific page but discovering that two ideas are connected.&lt;/p&gt;
&lt;p&gt;There are a few distinct problems here and they need different tools.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="retrieval-vs-exploration"&gt;Retrieval vs exploration
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Retrieval&lt;/strong&gt; is when you know what you want: &amp;ldquo;where did I write about Terragrunt?&amp;rdquo; A search box solves this. Fuzzy matching, title weighting, done.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exploration&lt;/strong&gt; is when you do not know what you want, or want to rediscover something you wrote a while ago. A menu does not help. Search does not help — you cannot search for something you have forgotten exists.&lt;/p&gt;
&lt;p&gt;The menu is for retrieval by navigation. Search is for retrieval by keyword. Neither is for exploration.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-does-not-work"&gt;What does not work
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Most recently used / most popular&lt;/strong&gt; — this feels like someone keeps moving your things. The notes that surface are the ones you or others have looked at lately, not the ones that are useful to you now. Navigation should not have memory that works against you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alphabetical listing&lt;/strong&gt; — fine as a fallback, not useful as a primary navigation mode. Proximity means nothing.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="two-experiments"&gt;Two experiments
&lt;/h2&gt;&lt;h3 id="mindmap"&gt;Mindmap
&lt;/h3&gt;&lt;p&gt;Every note as a node. Edges connect notes that share tags or belong to the same section. Lay it out with a force-directed simulation and you get a visual map of the knowledge base — clusters emerge naturally, isolated notes stand out, and you can trace paths between related ideas.&lt;/p&gt;
&lt;p&gt;The interesting property: clicking on one note shows which other notes it is connected to. This is not search — you are not looking for something specific, you are seeing the neighbourhood of an idea.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/mindmap/" &gt;Try it →&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="word-cloud"&gt;Word cloud
&lt;/h3&gt;&lt;p&gt;Sections and tags, sized by how many notes carry them. The big words are the areas where there is the most material. Click a word and it feeds directly into the search.&lt;/p&gt;
&lt;p&gt;This is an overview of the shape of the knowledge base. Good for answering &amp;ldquo;what is actually in here?&amp;rdquo; in a few seconds.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/wordcloud/" &gt;Try it →&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="the-shared-data-model"&gt;The shared data model
&lt;/h2&gt;&lt;p&gt;Both visualisations run off the same JSON index that powers search — a build-time output from Hugo listing every note with its title, URL, section, tags, and summary. One data source, three interfaces.&lt;/p&gt;
&lt;p&gt;The technical implementation is in &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/docs-as-code/site-navigation/" &gt;Notes: Site Navigation&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-is-still-missing"&gt;What is still missing
&lt;/h2&gt;&lt;p&gt;Tags are sparse — most notes do not have them, so the mindmap edges are mostly section-based rather than cross-section. Adding tags to notes as they are written would make the mindmap significantly more interesting over time.&lt;/p&gt;
&lt;p&gt;The word cloud currently surfaces sections more than tags for the same reason. As tags accumulate, it will shift toward showing the actual concepts rather than just the categories.&lt;/p&gt;
&lt;p&gt;Both are experiments. The interesting question is whether they change how notes get written — if knowing that a note will appear in a connected graph encourages tagging, or whether tagging feels like overhead.&lt;/p&gt;</description></item><item><title>Elasticsearch &amp; Kibana</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/frameworks-tools/elk/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/frameworks-tools/elk/</guid><description>&lt;p&gt;Elasticsearch is a distributed search and analytics engine built on Apache Lucene. Kibana is its web UI for querying, visualising, and exploring the data stored in Elasticsearch. Together they form the search and analysis layer of the ELK stack — typically with Logstash or Beats collecting and shipping data into Elasticsearch, and Kibana on top for humans to interact with it.&lt;/p&gt;
&lt;h2 id="elasticsearch"&gt;Elasticsearch
&lt;/h2&gt;&lt;p&gt;A document store where every document is JSON and every field is indexed by default. Queries are also JSON, using a rich query DSL that supports full-text search, structured filters, aggregations, and geospatial queries. Elasticsearch is horizontally scalable — an index is split into shards, shards are distributed across nodes, and replicas provide redundancy. Adding nodes increases both capacity and query throughput.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;Index&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;a&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;document&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;POST&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;/logs/_doc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2026-06-04T12:00:00Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;level&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;error&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;service&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;message&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;connection refused&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;#&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;Search&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;with&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;filter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;GET&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;/logs/_search&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;bool&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;filter&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; { &lt;span style="color:#f92672"&gt;&amp;#34;term&amp;#34;&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;&amp;#34;level&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;error&amp;#34;&lt;/span&gt; } },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; { &lt;span style="color:#f92672"&gt;&amp;#34;term&amp;#34;&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;&amp;#34;service&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;api&amp;#34;&lt;/span&gt; } }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;At scale, index lifecycle management (ILM) policies handle the hot-warm-cold tiering automatically — recent indices stay on fast nodes, older indices roll to cheaper storage, and expired indices are deleted.&lt;/p&gt;
&lt;h2 id="kibana"&gt;Kibana
&lt;/h2&gt;&lt;p&gt;The interface to Elasticsearch. Kibana&amp;rsquo;s core is &lt;strong&gt;Discover&lt;/strong&gt; — a time-series log explorer with free-text search and field filtering — and &lt;strong&gt;Dashboards&lt;/strong&gt; — composable visualisations (time series, bar charts, pie charts, data tables, maps) that query Elasticsearch directly. For log aggregation and observability use cases, a typical workflow is: ship logs into Elasticsearch via Filebeat or Logstash, explore them in Discover, build dashboards for the signals that matter, set up alerting rules on those patterns.&lt;/p&gt;
&lt;p&gt;Kibana also hosts the Elastic APM UI (application performance monitoring), the SIEM app (security event correlation), and the Lens visual editor for building dashboards without writing aggregation queries by hand.&lt;/p&gt;
&lt;h2 id="elk-vs-the-grafana-stack"&gt;ELK vs the Grafana stack
&lt;/h2&gt;&lt;p&gt;The Grafana stack (&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/observability/loki/" &gt;Loki&lt;/a&gt; + &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/observability/prometheus/" &gt;Prometheus&lt;/a&gt; + &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/observability/grafana/" &gt;Grafana&lt;/a&gt;) has become the common alternative for cloud-native environments. The key difference: Loki indexes only log metadata (labels), not the full log content — it is cheaper to run and query at scale, but full-text search across log bodies is slower. Elasticsearch indexes everything and full-text search is fast, but the storage and memory cost is significantly higher. For log volumes in the hundreds of GB/day and above, the operational cost of Elasticsearch becomes the dominant factor. For environments that need fast full-text search across structured and unstructured data — logs, documents, events — Elasticsearch earns its cost.&lt;/p&gt;
&lt;h2 id="resources"&gt;Resources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.elastic.co/docs/solutions/search" target="_blank" rel="noopener"
 &gt;Elasticsearch documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.elastic.co/docs/solutions/observability" target="_blank" rel="noopener"
 &gt;Kibana documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.elastic.co/guide/en/ecs/current/" target="_blank" rel="noopener"
 &gt;Elastic common schema (ECS)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>