zoukankan      html  css  js  c++  java
  • BooleanQuery与TermInSetQuery分析

    booleanQuery:
    "must" : [
    { "term" : { "like" : "cooking" } },
    { "term" : { "property" : "bike" } }
    ]
    termInsetQuery:
    { "terms": {"like": [ "cooking", "fishing", "swimming"]}}

    BooleanQuery
    BooleanWeight
    TermQuery.scorer
    查询单个term, 参考查询分析.
    https://www.cnblogs.com/vsop/p/12152207.html

    将子查询结果按照must, should, filter, must_not分类.
    根据should, must, filter数量进行:
    pure conjunction.
    pure disjunction.
    conjunction-disjunction mix.

    BlockMaxConjunctionScorer
    对多个postings求交集, advance时, 使用skipper.
    approximations: 每个子查询的结果集.
    BlockMaxConjunctionScorer$DocIdSetIterator.
    如果每个approximation都有doc, 则命中该doc.
    score: 该doc在每个子查询的score求和。
    moveToNextBlock:target > upTo(当前block最大doc)时,move to next block。
    advanceShallow(target):每个子结果都move到包含target的block。
    BlockImpactsDocsEnum 跳表实现
    advanceShallow(target):advance到包含target的block上.
    SlowImpactsEnum 对于结果数少的postings,不需要skipping

    DisjunctionScorer
    使用heap, 对多个postings求并集.
    DisiPriorityQueue
    取堆top, updateTop, 如果newTop等于top, 继续updateTop.
    DisjunctionSumScorer, DisjunctionMaxScorer
    postings合并后, 评分阶段, 一个doc有多个term时, 用来评分, sum或max。

    TermInSetQuery
    当terms数量不超过16时, rewrite成should boolean query.
    否则使用DocIdSetBuilder构建bit set.
    TermInSetQuery$ConstantScoreWeight.rewrite
    DocIdSetBuilder
    add(iter):
    当前已有bitset, 如果iter也是FixedBitSet(bitmap, 而非roaring bitmap), 两个bitset求OR; 否则遍历iter, set到bitset.
    否则遍历iter add到buffer或者达到threshold转成bitset。

    参考:
    lucene8.7.0
  • 相关阅读:
    TCP/IP,Http,Socket,XMPP的区别
    CygWin 常用命令
    js打印数组,js打印对象的方法
    中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)
    sql语句优化
    求职简历怎么写,看看百度吐槽
    c#学习笔记之WPF Application和Windows Form Applications
    c#学习笔记之XML
    c#学习笔记之LINQ
    c#学习笔记之字符串和正则表达式
  • 原文地址:https://www.cnblogs.com/vsop/p/14197845.html
Copyright © 2011-2022 走看看