We always have a moment in our lives when we are in a hurry to find a document, but it is buried somewhere in the Downloads folder, and we never get it in time. Searching for files across Downloads, Documents, and OneDrive folders is always a tedious task.
Over time, my Downloads folder became one of the largest folders on my system, not by size but by the number of files inside it. Each day I download photos, PDFs, and other work-related files. By evening, the list grows to a number that makes finding something downloaded earlier difficult.
Windows Search is supposed to ease the process of finding files. But it works in a strange way. Sometimes it finds the exact file that I want instantly. Other times it keeps on searching and never actually finds it. The results are not always consistent.
The inconsistency and frustration made me curious about how file searches actually work. This curiosity eventually led me to try something different that replaced Windows Search with a system I built myself.
Local Whisper transcribes hour-long meetings in minutes without sending a single word to any server
Modern hardware makes local AI surprisingly practical.
When Windows search stops being helpful
When search stops being reliable
Windows Search behaves inconsistently. Usually, typing a few letters on the search bar should be enough to find a file. Operating systems are designed to do that, but Windows Search never gives consistent results. Sometimes the search results appear instantly. Other times it either takes too much time or never finds the file at all. Over time, as folder size grows larger, it becomes more difficult to get reliable results.
In my daily schedule, I deal with various types of files such as images, screenshots, PDFs, and project files. The number can grow quickly. Sometimes, by the end of the day, the count reaches hundreds of files. Finding a file manually that was downloaded a couple of days ago becomes an impossible task. I have to depend on Windows Search to find them. For the latest files, I have to wait for indexing. Sometimes, I need to do a search more than once to find them. In simpler terms, I tried all the usual fixes, but the inconsistency is always consistent.
Finally, instead of trying to troubleshoot Windows Search again, I took a different route and started wondering whether the problem was the search system itself.
Turning a small Debian server Into a search brain
One small server changed everything
While researching different search tools, the one thing I observed was that search tools rely on indexing files. The indexer is the heart of a search tool, and it is not tied to any specific operating system. Even a small server could do the same job. That realization motivated me to build a custom indexer.
I own a homelab server. It runs on bare-metal Debian. And what’s a better place to build a setup for an indexer than a Linux server? The server has enough resources to host a lightweight indexer. Its only task is to host the indexer. Files stay on the Windows PC, while the folders are mounted on the server using SMB. The server only scans them.
I built a small Python script that scans folders, records file names, and stores metadata such as name, path, and location. I set up a simple cron job to run the Python script every 10 minutes to index any new files. Though more advanced solutions are available, such as incremental indexing and real-time file watchers like inotify and fswatch, these approaches are more useful in larger environments.
import os
import re
import meilisearch
client = meilisearch.Client("http://127.0.0.1:7700")
index = client.index("files")
# Scanning mounted SMB paths for metadata
for base_path in ["/mnt/windows/Downloads", "/mnt/windows/Documents"]:
for root, dirs, files in os.walk(base_path):
docs = [{
"id": re.sub(r'[^a-zA-Z0-9_-]', '_', os.path.join(root, f)),
"name": f,
"path": os.path.join(root, f),
"folder": root
} for f in files]
# Batch upload to Meilisearch
index.add_documents(docs)
Finally, I installed Meilisearch, a lightweight search engine running in Docker, to store the indexed metadata. It is designed for fast search queries and is a practical solution for a home environment. At that point, I had a working file index and a search engine. What I needed was a modern and simple way to actually use it.
Building a search interface that actually feels fast
The interface that made it usable
Technically, I already had a working backend with an API exposed by Meilisearch. What I needed was an interface to interact with the search engine, something lightweight, modern, and quick to use.
If you are familiar with any of my previous projects, you might know I am a big fan of React applications. Combined with Vite and Tailwind, I can build a modern interface in under an hour. I chose the same tech stack for this interface. It needed a modern interface with a search bar, nothing more, nothing less.
As mentioned earlier, Meilisearch exposes a simple API on port 7700. I used it to connect the interface to the search engine. The flow then was simple. I entered a query in the search bar, and the app sent it to Meilisearch. The API returned the exact paths of matching files. The interface then converted the stored path into a usable file path on my PC.
To make it easier to access, I implemented a Progressive Web App (PWA). It now gives a more native app-like experience. I could now pin the app to my Windows taskbar, making it accessible in one click. At that point, it became a practical tool that I could use every day.
What my file search looks like now
Search now happens in milliseconds
Looking back at Windows Search, this custom tool is a major improvement. With one click from the taskbar, I can open the search tool. I start typing the query, and it begins finding files from the first letter onward. The results appear almost immediately, most of the time within a few milliseconds.
The results return useful information such as the actual filename, file path, and type of file. It also has the ability to open the file in its dedicated app. Images open in Windows Photos, PDFs in a browser, and ZIP files in File Explorer. What started as a small experiment turned out to be a tool I now rely on every day.
I built a full-stack Python app using only local LLMs and the Model Context Protocol (MCP)
Architecture beats scale. Every time.
Search that finally makes sense
The frustration with Windows Search led me to build my own replacement. The result was more reliable than I expected. The experiment of understanding how the search indexing works eventually replaced the built-in search tool completely. A small Python script, a lightweight search engine, and a simple interface were all it took to make a difference in my daily workflow. Instead of digging through folders, I can now rely on a system that consistently finds what I am looking for.
