"Since we are talking about aggregating documents into an index, the word semigroup might pop into our heads."
This is why Haskell tutorials have a bad rep. Why not use a common English term like "monoid" instead?
Snark aside, the <>
approach to solving the problem piecewise and aggregating the results into a larger instance of the same type is a really convenient approach.