绊脚石乃是进身之阶。

关于es方法的一个简单问题,有点没搞懂prepareXXX方法和没有方法区别在哪?

Elasticsearch | 作者 jianjianhe | 发布于2018年07月02日 | 阅读数:3899

使用es方法的时候,会有两种,一种是有prepareXXX的前缀的方法,另一种是没有的,问题就是这两种方法效果是一样的,还是不一样的啊?有时候使用挺迷惑的,如果两种的效果一样,es提供一种就可以了吧,例如:
/**
* Indices Exists.
*
* @param request The indices exists request
* @return The result future
* @see Requests#indicesExistsRequest(String...)
*/
ActionFuture<IndicesExistsResponse> exists(IndicesExistsRequest request);

/**
* Indices exists.
*/
IndicesExistsRequestBuilder prepareExists(String... indices);
这两个方法都是检测索引是否存在,二者有区别吗?为什么es源码要提供两种这样的方法,希望哪位大牛能解释解释这个简单的问题,避免以后自己写代码,两种混着用
已邀请:

jianjianhe

赞同来自:

后来发现这个问题直接可以从代码中知道,就在这简单自己说明一下,es提供三种操作api:
 /**
* Search across one or more indices and one or more types with a query.
*
* @param request The search request
* @return The result future
* @see Requests#searchRequest(String...)
*/
ActionFuture<SearchResponse> search(SearchRequest request);

/**
* Search across one or more indices and one or more types with a query.
*
* @param request The search request
* @param listener A listener to be notified of the result
* @see Requests#searchRequest(String...)
*/
void search(SearchRequest request, ActionListener<SearchResponse> listener);

/**
* Search across one or more indices and one or more types with a query.
*/
SearchRequestBuilder prepareSearch(String... indices);
从es代码可以看出,第一种是一个异步操作,返回的是一个future对象,而第二种是一个无返回值的方法,但是提供一个监听器,可以监听response响应,而第三种也是最常用的方法,因为该方法可以同步也可以异步,也可以添加监听器,我觉得平时用第三种prepare前缀的方法比较方便吧

要回复问题请先登录注册