老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

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

ES的官方文檔中關于 檢索和排序的關系說得特別好:

網站建設哪家好,找創新互聯建站!專注于網頁設計、網站建設、微信開發、小程序設計、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了泰州免費建站歡迎大家使用!

Search needs to answer the question "Which documents contain this term?", 
while sorting and aggregations need to answer a different question: "What is the value of this field for this document?".

搜索要解決的問題是: "哪些文檔包含給定的關鍵詞?"
排序和聚合要解決的問題是: “這個文檔中對應字段的值是多少?”

同樣,以需求為出發點: "檢索的結果按時間排序" 這個需求在商品搜索和日志分析系統中是非常普遍的。 眾所周知,Lucene是通過倒排索引解決了“檢索的問題”,那么“排序的問題” 怎么處理呢?

最開始,Lucene是通過FieldCache來解決這個需求。就是通過FieldCache建立docId - value的映射關系。 但是FieldCache有個兩個致命的問題: 堆內存消耗 和 首次加載耗時 。 如過索引更新頻率較高,這兩個問題引發的GC和超時導致系統不穩定估計是程序員的噩夢。

從Lucene4.0開始,引入了新的組件IndexDocValues,就是我們常說的doc_value

它有兩個亮點:

1. 索引數據時構建 doc-value的映射關系。注: 倒排索引構建的是value-doc的映射關系。

2. 列式存儲

這基本上就是“空間換時間”和“按需加載”的典型實踐了。 而且,列式存儲基本上是所有高效NOSQL的標配,Hbase, Hive 都有列式存儲的身影。

IndexDocValues跟FieldCache一樣解決了“通過doc_id查詢value”的問題, 同時也解決了FieldCache的兩個問題。

ES基于doc_value構建了fielddata, 用于排序和聚合兩大功能。 所以,可以毫不客氣地說, doc_value是ES aggregations的基石。

那么在ES中, fielddata如何使用呢? 以binary類型為例,參考: org.elasticsearch.index.fielddata.BinaryDVFieldDataTests

s1: 建mappings時需要特殊處理

        String mapping = XContentFactory.jsonBuilder().startObject().startObject("test")
                .startObject("properties")
                .startObject("field")
                .field("type", "binary")
                .startObject("fielddata").field("format", "doc_values").endObject()
                .endObject()
                .endObject()
                .endObject().endObject().string();

s2: 通過leafreader構建doc_values

 LeafReaderContext reader = refreshReader();
        IndexFieldData indexFieldData = getForField("field");
        AtomicFieldData fieldData = indexFieldData.load(reader);

        SortedBinaryDocValues bytesValues = fieldData.getBytesValues();

s3: 定位到指定文檔, 用setDocument()方法。

/**
 * A list of per-document binary values, sorted
 * according to {@link BytesRef#getUTF8SortedAsUnicodeComparator()}.
 * There might be dups however.
 */
public abstract class SortedBinaryDocValues {

    /**
     * Positions to the specified document
     */
    public abstract void setDocument(int docId);

    /**
     * Return the number of values of the current document.
     */
    public abstract int count();

    /**
     * Retrieve the value for the current document at the specified index.
     * An index ranges from {@code 0} to {@code count()-1}.
     * Note that the returned {@link BytesRef} might be reused across invocations.
     */
    public abstract BytesRef valueAt(int index);

}

注意,如果reader是組合的,也就是有多個,需要用到docBase + reader.docId。 這里是容易采坑的。

s4: 獲取文檔的指定field的value,使用 valueAt()方法。

最后總結一下, 本文簡述了lucene的doc_value和 es的fielddata的關系, 簡要描述了一下doc_value的基本思想。最后給出了在ES中使用fielddata的基本方法。這對于自己開發plugin是比較有用的。


分享題目:ES學習筆記之--fielddata的起源
文章位置:http://www.xueling.net.cn/article/psphcc.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产偷伦 | 亚洲精品免费播放 | 一夲道DVD高清无码 粉嫩av在线播放一绯色 | 国产午夜亚洲精品国产成人小说 | 98久久久 | 九九色在线视频 | 欧美一级片毛片 | 亚洲AV男人的天堂在线观看 | 无码久久综合免费 | 亚洲国产专区 | 国产AV无码专区亚洲AV毛片搜 | 男女后进式猛烈XX00动态图片 | 婷婷综合缴情亚洲 | 国产在线视频在线 | 国产97超碰 | 999在线精品视频 | 成年人视频免费 | 国产精品久久9 | 午夜爽爽爽男女免费观看影院 | a国产在线v的不卡视频 | 青青草免费av| 亚洲日本VA在线视频观看 | 丁香激情综合 | 少妇性饥渴BBBBB搡BBBB | 强奷乱码欧妇女中文字幕熟女 | 久久精品亚洲酒店 | 国产12页| 成人特级片 | 国产欧美亚洲精品第二区软件 | 色戒2小时38分无删除版 | 一区二区播放 | 日本精品久久中文字幕 | 国产成人免费观看久久久 | 欧美日韩在线影院 | 91干视频 | 高H猛烈失禁潮喷A片在线观看 | 久久99精品国产麻豆婷婷洗澡 | 久久网中文字幕 | 麻豆天美国产一区在线播放 | 日韩人妻无码系列专区 | 国产XXXX做受视频 |