Typing in the search input field (located on top of the sidebar) triggers searching in the website contents. The search results appear as you type, and the search query is case insensitive.

If you are curious, the implementation details are documented here.

The website is indexed with a proper search engine, which should provide quite accurate results. At the same time, there is also a basic search fallback, which provides much worse results, so if you’ll notice that you are getting rather crude matches or nothings at all, that is likely because you got (temporarily) switched to the basic search.

Content is indexed by sections

Important to note that the content is indexed by sections on pages, not by whole pages, which is why you will see “indexed items” term used in the examples below. In general, one indexed item is one section of a page, but long sections get split further into several items.

In the following example:

# Lorem

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed hendrerit nulla id tortor
faucibus, vel ultricies enim cursus. Quisque massa orci, sollicitudin quis scelerisque
dignissim, maximus non ex. Pellentesque habitant morbi tristique senectus et netus
et malesuada fames ac turpis egestas.

Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
himenaeos. Proin et nunc metus. Etiam luctus maximus lectus sed semper.

Nam elementum sapien convallis bibendum imperdiet. Ut quis magna at quam pharetra
sollicitudin. Duis sagittis dui eu libero sodales pretium. Suspendisse in ultricies
nisl. Etiam maximus scelerisque nunc, eget commodo lacus tincidunt a.

# Praesent

Praesent dapibus pellentesque tellus, vitae vestibulum nibh commodo eget. Sed elementum
vitae ex sed vehicula. Mauris sit amet accumsan nunc, eu blandit sem. Proin imperdiet
bibendum erat, sed feugiat elit hendrerit ac.

Proin dolor odio, dapibus eu porttitor vitae, placerat id nibh. Etiam faucibus pharetra
iaculis. Proin congue quam a nisi porttitor semper. Donec eleifend quam eget quam
dignissim imperdiet.

there are two sections - “Lorem” and “Praesent” - and from the search perspective these are two different indexed items (documents), so results for elementum query will contain matches from both of them, even though they belong to the same page.

Ranking

The search results are ranked in order to place the best results first. Here are some of the ranking rules:

  • the highest rank gets assigned to results that contain all of your search query words spelled exactly as they are;
    • the closer the words are to each other in the text, the higher is the rank;
  • results that contain all the search query words come first and then go results that are missing some of them - for the latter the search will be dropping words from the end of your search query, so put the most important words first;
  • page structure elements have different ranks:
    • matches in a page title rank higher than matches in headings;
    • matches in headings rank higher than matches in regular text;
  • the last/only word in the query can be partial - searching will consider not only exact matches but also words starting with that prefix, so for example interc query will find “interchange”, “intercourses”, “intercept” and so on;
    • if the partial word is not the only word in the search query, then the other words before it must be spelled in full;
    • partial matches get lower rank than the exact matches (although only as the final tie-breaker);

Typo tolerance

There is also certain typo tolerance in place:

  • by default you can make one typo in words of 5 letters or longer and two typos in words of 9 letters or longer;
    • a typo in the first letter counts as two, so cinan will find “conan”, but vonan will not;
  • one example with a typo is that queries capability (correct) and capsability (typo) will return similar/same results (including this very page, where it is not a typo but an example);
  • another example without a typo (and with actual ranking this time) is that a bitch query will result in a high-rank match for “bitch” but also in a low-rank match for “batch” (as it could have been a typo, even though it is not); while a batch query will result in the same matches but with their ranking swapped, so “batch” will be higher and “bitch” will be lower;
  • typos also apply to partial matches (the last/only word), so interc also finds “interaction” and “internal”, although ranked lower.

Examples

Search query What it will find
fuck indexed items that have the word "fuck" or words starting with it - "fucks", "fucked", "fucking" and so on
fucking shit indexed items that have both the word "fucking" and the word "shit" (or words starting with "shit") in any order, possibly containing other words between them
fucking sh same as the previous example, but now the results will also include words starting with "sh" (such as "SharePoint", "should", "shut", etc), which is obviously less precise
fuc sh most likely won't find anything, because only the last word in the search query can be partial, so the search will treat fuc as the full word, and there is no such word on the entire website (except for this page)
"fucking shit" indexed items with these exact words next to each other (no other words between them), in this exact order, no partial matches
fuck -shit indexed items with exactly "fuck" (no "fucking" this time) but without "shit", because now the excluded word is the last one in the query, so fuck is no longer partial
-shit fuck same exclusion of "shit", but now fuck is the last word, so partial matches are considered too, and then it finds "fucking", "fucked", etc
fucking -things indexed items with "fucking" but without "things"
fucking -thing indexed items with "fucking", without "thing", but since partial matches do not apply to negative keywords, indexed items with "things" will be among results
fucking -shit -thing -things indexed items with "fucking" but without words "shit", "thing", "things" in any order
fucking -"lot of things" indexed items with "fucking" but without the exact phrase "lot of things". And since the website content is indexed by sections, the exclusion applies to sections, not to pages, so while you indeed won't see sections containing this phrase, other sections from that same page might still be listed in the search results

There are also several caveats to know about:

  • characters such as ::, _, - and / serve as word separators, so to find “QDateTime::currentDateTime” your search query can be either QDateTime::currentDateTime or QDateTime currentDateTime (or rather their quoted variants "QDateTime::currentDateTime" and "QDateTime currentDateTime" to find the exact matches);
  • since the minus before a word excludes that word from the results, in order to find a flag such as “-DCMAKE” the search query would have to be without it - just the DCMAKE;
    • speaking about flags in particular, those often have a value assigned to them, and the = character is not a word separator in search terms, which makes tokens like “TYPE=Release” to get indexed as a single word. Thus, in order to search for things like CMake flags, you’ll need to include the part with value too:
      • quoted variant "DCMAKE_BUILD_TYPE=Release" will find those exact matches;
      • unquoted variant DCMAKE_BUILD_TYPE=Release will find separate matches for “DCMAKE”, “BUILD” and “TYPE=Release”;
  • the exact C++ and C# terms have been added to a reserved dictionary, so searching for either of them won’t find absolutely everything that contains “c”;
  • in addition to being case insensitive, the search also normalizes accents (but not all the weird letters such as ø), so both ærl and aerl queries will find “ærlig”, however donn won’t find dønn.

The indexed search might not always be available (backend not available, rate-limiting kicked in, etc), and in that case the search functionality will fallback to the basic search. For that kind of search none of the above applies, as it merely looks for exact matches of whatever is typed in the search input field. Also, that search only checks titles and summaries of the blog posts, so the vast majority of the website content is not covered.