Refactor the current single thread pool into several pools that can be used based on operation performed. This is handy for example to make sure search is only done on a specific thread pool since it associates resources per thread.
The new thread pools include:
index: for index/delete/bulk operations.
search: For get/count/search operations.
Each pool can have a type associated with it, and based on the type, associated parameters. The types can be cached, fixed, scaling, and blocking.