原创 Lucene學習筆記之-核心數據結構PriorityQueue的實現原理

Luene的核心應用場景是全文檢索。簡單來說,就是通過用戶輸入的關鍵詞來匹配相關文檔,然後根據匹配程度返回TopN的查詢結果給用戶。 這裏需要解決的一個核心問題就是如何快速返回TopN的結果,這本質上是一個排序的問題。說起排序,我們有很多選

原创 ES學習筆記之-集成測試的簡單學習

集成測試在es源碼中的用法比較簡單。我選擇的切入口是delete-by-query插件。 將es插件的源碼導入intellij後,直接運行類DeleteByQueryRestIT, 就會運行所有的集成測試用例。 -ea -Dtests.se

原创 Java基礎學習之--理解Object類

看Java API的Object類, 一共11個方法。按使用的頻度排名: toString() 這個方法最常用在打日誌,定位代碼問題。 equals()和hashCode(), 這兩個方法的使用經典例子是HashMap的源碼

原创 ES學習筆記之-AvgAggregation的實現過程分析

我們需要查看數據的統計量時,均值是最重要的特徵之一。 對於海量數據,這類簡單的聚合ES可以做到秒級別返回。聚合是ES的特色功能。 那麼ES是如何實現這一功能的呢? 我們知道,ES的數據存儲在各個節點中, 所以ES的實現AvgAggrega

原创 從貝葉斯公式到垃圾郵件的識別

看《***與畫家》講到"防止垃圾郵件的一種方法",覺得很適合用來表述數學公式與機器學習之間的關係。涉及到機器學習的數學公式比較簡單,概率論基礎教程都會講到。解決的問題也很典型: 垃圾郵件的識別。 防止垃圾郵件有很多種方法,最直觀的一種就是“

原创 ES聚合學習筆記之--HyperLogLog與BloomFilter

ES的聚合是其一大特色。然而出於性能的考慮, ES的聚合是以分片Shard爲單位,而非Index爲單位, 所以有些聚合的準確性是需要注意的。 比如: TermAggregations. es的基數聚合使用到了hyperloglog算法。 出

原创 ES學習筆記之--fielddata的起源

ES的官方文檔中關於 檢索和排序的關係說得特別好: Search needs to answer the question "Which documents contain this term?", while sorting and a

原创 ES學習筆記-elasticsearch-hadoop導入hive數據到es的實現探究

各個業務數據“彙總到hive, 經過ETL處理後, 導出到數據庫“是大數據產品的典型業務流程。這其中,sqoop(離線)和kafka(實時)幾乎是數據總線的標配了。 但是有些業務也有不標準的,比如hive數據導入到ES. hive數據導入到

原创 ES源碼學習之--Get API的實現邏輯

Github上es項目講述其易用性時,用來舉例說明ES開箱即用的特性,用的就是Get API。片段摘取如下: -- 添加文檔 curl -XPUT 'http://localhost:9200/twitter/doc/1?pretty' -

原创 ES插件開發之--如何添加自己的動態設置項

ES中,有一類參數是可以動態調整的,比如副本數量: number_of_replicas。在插件開發中,如何添加自己的自定義參數呢?在插件的入口,添加onModule(ClusterModule module)即可。 public clas

原创 Lucene NumericRangeQuery的初步理解

理解NumericRangeQuery, 首先需要理解Lucene是如何存儲數值類型. 文本初步探討了Int和Float兩種數值類型在Lucene中的存儲實現,數值類型的分詞原理,  最後給出NumericRangeQuery的簡單理解.L

原创 Lucene源代碼學習之 PackedInts

    Java提供了四種類型來存儲一個整型:Byte,short,int,long。但是如果整數的範圍在[0,100000],那麼只需要17bits就足夠存儲了,因爲2^17=131072。但是,你不能夠選擇short來存儲,因爲shor

原创 Apache LuceneTM5.0.0 版本即將發佈

Apache LuceneTM5.0.0 版本即將發佈    源文地址:http://blog.mikemccandless.com/2014/11/apache-lucene-500-is-coming.html最後,在密集發佈一系列4.

原创 lucene源代碼學習之LZ4壓縮算法在lucene中應用

LZ4算法又稱爲Realtime Compression Algorithm,在操作系統(linux/freeBSD)、文件系統(OpenZFS)、大數據(Hadoop)、搜索引擎(Lucene/solr)、數據庫(Hbase)……都可以看

原创 ES學習筆記之---template的使用

es提供template功能的出發點在哪裏呢? 作爲NoSQL數據庫, ES在數據入庫前是不做schema設定的, 也就是不限定數據字段.這對日誌類型的數據來說, 是個利好的場景. 但是這種不設定schema的做法, 有時有太過自由. 有些