增加
public IndexResponse insert(OrderOperation orderOperation){
IndexResponse response = client.prepareIndex(this.indexName, this.type)
.setRouting(orderOperation.getOrderId())
.setSource(ESJsonUtil.orderOperator2JsonData(orderOperation))
.execute().actionGet();
return response;
}
设置了routing属性
添加routing属性,相同的routing会放在相同的分片上,加快搜索速度,查询时添加routing属性,即告诉ES要去哪个分片查找
不设置routing也可以查找到
BoolQueryBuilder queryBuilder = boolQuery()
.must(QueryBuilders.termQuery("_routing", routingValue))
.must(QueryBuilders.termQuery(OrderOperation._Fields.ORDER_ID.getFieldName(),orderId ));
FieldSortBuilder fieldSortBuilder = SortBuilders.fieldSort(
OrderOperation._Fields.CREATE_TIME.getFieldName())
.order(SortOrder.DESC);
SearchRequestBuilder searchRequestBuilder = client
.prepareSearch(this.indexName).setTypes(this.type)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
if (queryBuilder != null) searchRequestBuilder.setQuery(queryBuilder);
// 排序
if (fieldSortBuilder != null) searchRequestBuilder.addSort(fieldSortBuilder);
SearchResponse response = searchRequestBuilder.execute().actionGet();
由于设置了routing属性,文档的Id不唯一,这时根据文档Id更新时不设置routing属性时 会出现文档都是的错误
若在创建文档时 指定文档的Id 这时不设置routing属性 也可以更新
public void updateDocument(String id,String orderId, String field, String newValue){
Map<String, Object> updateObject = new HashMap<String, Object>();
updateObject.put(field, newValue);
UpdateResponse updateResponse = client.prepareUpdate(this.indexName, this.type, id)
.setRouting(orderId)
.setDoc(updateObject)
.setRefresh(true).execute()
.actionGet();
}