Decouple caption and its serialization
Add elastic-search engine support