久久天天躁狠狠躁夜夜免费观看,精品国产粉嫩内射白浆内射双马尾,久久国产欧美日韩精品,久久久久久性高,激情欧美成人久久综合

Elasticsearch Java API 獲取version,以及數(shù)據(jù)_version的介紹

JSON 2016-08-22 18:52:24 22398

更多的 Elasticsearch  ,請點擊這里: Elasticsearch教程   ,本博客主要針對2.0 以上的 Elasticsearch  版本相關(guān)使用,以Java API 為主,適用于初級 Elasticsearch  使用者參考。如果有問題可以加群一起討論。

本篇主要講解的是,在批量獲取數(shù)據(jù),或者查詢數(shù)據(jù)后,要獲取當(dāng)前數(shù)據(jù)操作的_version ,我今天發(fā)現(xiàn)獲取的_version -1 ,然后看下源碼發(fā)現(xiàn)默認(rèn)值就是-1 ,查詢的結(jié)果response ,里面根本就沒有version ,網(wǎng)上不知道是我姿勢不對還是就是沒有資料,后來找了相關(guān)文檔,咨詢了一些人。找到了答案。

本站的應(yīng)用實現(xiàn),你可以點擊:http://suancuo.cn/me/history.shtml 這個鏈接是查看你在本站瀏覽了哪些頁面,業(yè)務(wù)邏輯是,你訪問一個頁面超過2秒,就會記錄這個頁面的鏈接和標(biāo)題,再次訪問,會再插入一次,這時候會更新訪問時間和_version,也就是達到我要的效果了。

這個鏈接可以通過,在本站任意頁面,鼠標(biāo)單擊右鍵。點擊“瀏覽記錄”就可以跳轉(zhuǎn)到這個頁面。


應(yīng)用場景舉個栗子:

一、記錄用戶對某一個實物操作的次數(shù),如簡單的熱詞搜索,不用記錄信息,只要知道哪些詞搜索了多少次。

解決方案:

    1.每一次插入數(shù)據(jù),然后count 總和一下。

    2.每一次插入前,先查找,然后有就count++ ,沒有就insert一條數(shù)據(jù)。

    3.。。。

二、頁面訪問次數(shù),不需要記錄訪問的信息,就想知道頁面訪問了多少次。

解決方案:和第一點相同。

三、單純的就是想知道數(shù)據(jù)操作了多少次,操作包過,覆蓋(同“_id” 插入),update等操作。這時候_version 可以直接用。

下面來看看這個_version。

我們用 head  插件查看下數(shù)據(jù)( head插件安裝  ):

上面看到了_version 1 ,那么這條數(shù)據(jù)就是操作了一次,也可以說是初始數(shù)據(jù)。

我們再來看看一個操作很多次數(shù)的數(shù)據(jù)。

上面的這個_version 36 ,也就是操作了36 次。

Java API查詢關(guān)于_version的獲取。

單條數(shù)據(jù)查詢:

//創(chuàng)建查詢
GetRequest rq = new GetRequest(MappingManager.INDEX, MappingManager.TYPE, id);
//執(zhí)行查詢
GetResponse response = ESTools.client.get(rq).actionGet();
//獲取viersion
long version = response.getVersion();
System.out.printf("ID:%s的version為:%s",id, version);

這個時候能獲取到到數(shù)據(jù)的version ,單條查詢是默認(rèn)開啟version 的。

批量查詢:

這里隨便拿個業(yè)務(wù)代碼做解析。

/**
 * 瀏覽記錄,分頁查詢
 * @param key		用戶key
 * @param pageSize	size
 * @param pageNo	no
 * @return			分頁對象
 */
public static Pagination findByHistoryPage(String key, Integer pageSize, Integer pageNo) {
	Pagination page = new Pagination();
	pageNo = null==pageNo?1:pageNo;
	page.setPageNo(pageNo);
	page.setPageSize(pageSize);
	
	
	Client client = ESTools.client;
	SearchRequestBuilder srb = client.prepareSearch(BaseMapping.HISTORY_INDEX);
	//根據(jù)用戶key查詢
    srb.setQuery(QueryBuilders.termQuery("key",key) )  ;
	/**設(shè)置返回version,默認(rèn)是false**/
    srb.setVersion(Boolean.TRUE);
    srb.addSort("createDate", SortOrder.DESC);
	srb.setFrom((pageNo - 1) * pageSize).setSize(pageSize)
	.setExplain(Boolean.TRUE);
	//get() == execute().actionGet(); 新版本把execute().actionGet() 封裝成get().
	SearchResponse response = srb.get();
	SearchHits hits = response.getHits();
	//total
	int total = (int)hits.getTotalHits();
	page.setTotalCount(total);
	
	List list = new ArrayList(total);
	for (SearchHit searchHit : hits) {
		Map source = searchHit.getSource();
		String id = searchHit.getId();
		//獲取version,作為count返回
		long v = searchHit.getVersion();
		//先創(chuàng)建,防止catch后 null.toString()異常。
		JSONObject json = new JSONObject();
		try {
			json = JSONObject.fromObject(source);
			HistoryBo entity = (HistoryBo) JSONObject.toBean( json, HistoryBo.class);
			entity.setCount(v);
			entity.setKey(id);//把ID取出來,給key賦值,方便刪除操作
			list.add(entity);
		} catch (Exception e) {
			LoggerUtils.fmtError(SelectManager.class, e, "轉(zhuǎn)換為失敗,Data[%s]", json.toString());
			continue;
		}
	}
	page.setList(list);
	return page;
	
}

這個地方的一個操作srb.setVersion(Boolean.TRUE); 是關(guān)鍵,如果不設(shè)置,不管怎么查詢,返回的都是-1,老版本我記得沒這個,這是新版本的一個優(yōu)化。

我們看下源碼:

public class InternalSearchHit implements SearchHit {

    private static final Object[] EMPTY_SORT_VALUES = new Object[0];

    private transient int docId;

    private float score = Float.NEGATIVE_INFINITY;

    private Text id;
    private Text type;

    private InternalNestedIdentity nestedIdentity;

    private long version = -1;//這里源碼默認(rèn)值,沒開啟就會返回默認(rèn)值“-1”

    private BytesReference source;

    ......................此處省略...........................

Just let it be!
有問題加群解決。。。或者留言。。。


版權(quán)所屬:SO JSON在線解析

原文地址:http://suancuo.cn/blog/126.html

轉(zhuǎn)載時必須以鏈接形式注明原始出處及本聲明。

本文主題:

如果本文對你有幫助,那么請你贊助我,讓我更有激情的寫下去,幫助更多的人。

關(guān)于作者
一個低調(diào)而悶騷的男人。
相關(guān)文章
Elasticsearch教程,Elasticsearch Java API創(chuàng)建Mapping,指定分詞器
Elasticsearch教程(八) elasticsearch delete 刪除數(shù)據(jù)Java
Elasticsearch 教程,Elasticsearch 日期查詢詳解,Elasticsearch Date 查詢Java API
Elasticsearch 分詞,Elasticsearch Java API 分詞 操作
Java 獲取時間戳的方法大全,以及速度比較
Elasticsearch 隨機返回數(shù)據(jù) API
Elasticsearch教程(七) elasticsearch Insert 插入數(shù)據(jù)Java
支付寶好友吱口令介紹,加好友吱口令獲取圖解
Java 隨機從 List 隨機獲取多個不重復(fù)對象,Mysql 隨機10條數(shù)據(jù)
Elasticsearch教程(九) elasticsearch 查詢數(shù)據(jù) | 分頁查詢
最新文章
計算機網(wǎng)絡(luò)的相關(guān)內(nèi)容 354
SOJSON V6 JavaScript 解密技巧與分析 5940
微信客服人工電話95068:如何快速解封微信賬號(2025最新指南) 11885
Java Http請求,HttpURLConnection HTTP請求丟失頭信息,Head信息丟失解決方案 5052
實用API合集分享:教你輕松獲取IP地址的API合集 8839
Linux I/O重定向 6705
Ruby 循環(huán) - while、for、until、break、redo 和 retry 3990
Node.js:全局對象 3604
如何使用終端檢查Linux上的內(nèi)存使用情況 3779
JavaScript對象詳細剖析 3252
最熱文章
免費天氣API,天氣JSON API,不限次數(shù)獲取十五天的天氣預(yù)報 745370
最新MyEclipse8.5注冊碼,有效期到2020年 (已經(jīng)更新) 703112
蘋果電腦Mac怎么恢復(fù)出廠系統(tǒng)?蘋果系統(tǒng)怎么重裝系統(tǒng)? 678428
Jackson 時間格式化,時間注解 @JsonFormat 用法、時差問題說明 561958
我為什么要選擇RabbitMQ ,RabbitMQ簡介,各種MQ選型對比 511823
Elasticsearch教程(四) elasticsearch head 插件安裝和使用 483716
Jackson 美化輸出JSON,優(yōu)雅的輸出JSON數(shù)據(jù),格式化輸出JSON數(shù)據(jù)... ... 299543
Java 信任所有SSL證書,HTTPS請求拋錯,忽略證書請求完美解決 246654
Elasticsearch教程(一),全程直播(小白級別) 232088
227528
支付掃碼

所有贊助/開支都講公開明細,用于網(wǎng)站維護:贊助名單查看

查看我的收藏

正在加載... ...