Check out the significant_terms aggregation. It will help you discover interesting related terms.
Once you have a collection of interesting terms you can issue a follow-up request using the adjacency matrix aggregation to fill in all sorts of details about co-occurrences. Child aggregations can be used to discover for example:
- When a pair were first used together
- How many times they've been used together, per day, over time
- How many different people have used these together
etc