DocValues的理解应用

在lucene-4.0-alpha的Hightlights中有这么一段:

  • Added support for per-document values (DocValues). DocValues can be used for custom scoring factors (accessible via Similarity), for pre-sorted Sort values, and more.它的主要作用是custom scoring factors。

    其实第一眼看到这HightLight,想到的是这对比原来的Document级别的Boost有哪些不同。Document级别的Boost虽然不是一个custom scoring factor, 但它也可以用来影响整体score(在根据score进行排序的情况下)。

    Document boost的特点:

  • default value is 1.0
  • This value will be multiplied intothe score of all hits on this document.
  • Values are multiplied into the value of Fieldable#getBoost() of
    each field in this document. Thus, this method in effect sets a default boost for the fields of this document, 也就是说this value会被传递影响到field boost,如果field boost是1.0的话,也就相当于给所有field 设置了一个和document一样的boost。
  • 作用norm的一部分,这个boost没有单独的一块地方来store它。只能和其它norm共存一室。
    基于这些点,这个boost所起的作用是被固定的。
    相对于4.0中的DocValues。4.0中docvalues

    应该说4.0中的docvalues是伴随着4.0中similarity做成一个component后而出现的。
    在4.0之前整体体系结构上是使用 its hard-wired classic vector space scoring model。

    在4.0中,我们可以通过similarity的封装,在计算score时,按自己的需要来决定docvalues中的值来影响socre。

     Java |  copy code |? 
    01
    @Override
    02
    public ExactSimScorer exactSimScorer(SimWeight stats, AtomicReaderContext context) throws IOException {
    03
    final ExactSimScorer sub = sim.exactSimScorer(stats, context);
    04
    final Source values = context.reader().docValues(boostField).getSource();
    05
     
    06
    return new ExactSimScorer() {
    07
    @Override
    08
    public float score(int doc, int freq) {
    09
    return (float) values.getFloat(doc) * sub.score(doc, freq);
    10
    }
    11
     
    12
    @Override
    13
    public Explanation explain(int doc, Explanation freq) {
    14
    Explanation boostExplanation = new Explanation((float) values.getFloat(doc), "indexDocValue(" + boostField + ")");
    15
    Explanation simExplanation = sub.explain(doc, freq);
    16
    Explanation expl = new Explanation(boostExplanation.getValue() * simExplanation.getValue(), "product of:");
    17
    expl.addDetail(boostExplanation);
    18
    expl.addDetail(simExplanation);
    19
    return expl;
    20
    }
    21
    };
    22
    }

    在这里是直接使用docvalues中的值乘以原先的score。当然我们也可以相加,or其它运算。

Native C/C++ Like Performance For Java Object Serialisation

title就直接引用一下人家的吧。

具体文章见:
Native C/C++ Like Performance For Java Object Serialisation

从中能看到的关键几个技术点是:
1) ByteBuffer
2) Unsafe

其实对于这两点,在 https://github.com/eishay/jvm-serializers 都能找到影子。

在deserialize相差不大的情况下,我是更倾向于选择支持前后兼容,自描述的实现方案。

重启blog

两年前,起过一个念头想坚持写blog,期间也坚持了一段时间。刚才想找N多理由来表达后来没有坚持下来是因为1)没有自己的空间,偶尔出了几次问题影响了自己的持续性 2)工作有段时间太忙,把这事丢在一边 。。。。。哈哈,其实这些是坚不可摧的理由吗?不用回答,你也懂的 :)

还是之前的名字:蛋珠珠的生活快照。希望这里除了那么点技术记录外,还会有我的其它影子。