我在弹性搜索文档中进行更新,同时一个休息api正在调用搜索结果。以下是我的代码。
public String updateElasticsearchDocument(String index, String type, List<String> indexID) {
Client client = ESClientFactory.getInstance();
UpdateResponse updateResponse = null;
JSONObject jsonResponse = new JSONObject();
JSONObject json =new JSONObject();
int i=1;
try {
for(String id : indexID)
{
updateResponse = client.prepareUpdate(index, type, id)
.setDoc(jsonBuilder()
.startObject().field("view_mode", "read")
.endObject())
.setDocAsUpsert(true)
.setFields("_source")
.execute().actionGet();
logger.info("updating the document for type= "+ updateResponse.getType()+ " for id= "+ updateResponse.getId());
json.put("indexID"+i, updateResponse.getId());
i++;
}
jsonResponse.put("updated_index", json);
} catch (ActionRequestValidationException e) {
logger.warn(this.getClass().getName() + ":" + "updateDocument: "
+ e.getMessage(), e);
}
catch (ElasticsearchException e) {
logger.warn(this.getClass().getName() + ":" + "updateDocument: "
+ e.getMessage(), e);
e.printStackTrace();
} catch (IOException e) {
logger.warn(this.getClass().getName() + ":" + "updateDocument: "
+ e.getMessage(), e);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonResponse.toString();
}
搜索查询我在这里暂停
POST /monitoring/quota-management/_search
{
"query": {"match": {
"view_mode": "read"
}},
"sort": [
{
"_timestamp": {
"order": "desc"
}
}
],
"size": 10
}
现在这两个请求之间存在时间差,我必须等待40-50秒才能获得更新的搜索结果。这影响了生产应用。请告诉我这里需要做些什么来最大限度地缩短所花费的时间
-Subhadip
答案 0 :(得分:1)
如果您希望立即为数据编制索引,可以像下面这样设置刷新更新:
client.prepareUpdate(index,type,id).setRefresh(true).setDoc(...)。execute()。actionGet();
请注意,如果您经常更新,则需要做出权衡。索引可能会占用大量的IO / cpu。
良好的中间地点是将刷新间隔设置为合理的间隔。