- Elasticsearch – Geo Queries and geo_point
“Show me places near here”, done properly. Mapping geo_point and the five formats it accepts — including the one that reverses longitude and latitude and silently puts your listings in the Gulf of Guinea. geo_distance as a filter, geo_bounding_box for a map viewport, sorting by _geo_distance and reading the distance back off each hit for free, and geo_shape when a point is not enough.
- Elasticsearch – Aggregations and Faceted Search
Aggregations are the other half of Elasticsearch, and the half that turns a search box into a filter panel. Metric, bucket and pipeline aggregations, nesting them, aggregating on keyword rather than text and why that is not optional, and the part most tutorials skip: a facet counted inside its own filter collapses to a single row, so the guest can never switch cities without clearing the filter first.
- Elasticsearch – Sorting Results
Sorting looks trivial until the first field you try refuses. Why sorting on a text field fails and what fielddata has to do with it, tie-breakers and why a sort without one gives unstable pages, missing values, sorting by distance and by script, what happens to _score when you sort by a field, and reading the sort values back off a hit — which is also how search_after paginates past the 10,000-result wall.
- Elasticsearch – Relevance Tuning That Is Not Guesswork
A relevance complaint is never settled by opinion. What BM25 actually computes, reading the _explain output that shows the arithmetic, what a field boost is worth and why ^2 shows up as 4.4, the multi_match types and a real bug one of them caused — “san francisco loft” returning nothing — fuzziness, and folding a rating into a text score with function_score without letting it take over.
- Elasticsearch – bool, Filters and the Filter Cache
How real queries are assembled. The four bool clauses — must, filter, should, must_not — and the distinction that decides both correctness and speed: filter clauses do not score and are cached, must clauses score and never can be. Then term versus terms when a filter panel has two boxes ticked, ranges, exists, and why a filter on a text field quietly matches the wrong things.