Elastic Search使用

增加

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();

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值