码迷,mamicode.com
首页 > 其他好文 > 详细

BooleanQuery与TermInSetQuery分析

时间:2021-01-01 11:54:07      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:move   tps   top   ppi   builder   map   OLE   hold   target   

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

BooleanQuery与TermInSetQuery分析

标签:move   tps   top   ppi   builder   map   OLE   hold   target   

原文地址:https://www.cnblogs.com/vsop/p/14197845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!