首先我们定义一下问题, 我们这里把范围查询的范围缩小到只讨论数值范围查询. 文本类型的范围查询在lucene中也是支持的, 但是算法比较简单, 这里就不讨论了....如给定数值集合1,2,3,12,22,30, 如果当成文本进行索引那么索引的顺序为1,12,2,22,3,30, 索引的顺序首先就不能反应数字的大小, 在这种情况下做范围查询显然是错的....SplitRange对423,642进行范围转换, 得到:
1/[423, 429]
1/[640, 642]
10/[430, 490]
10/[600, 630]
100/[500, 500]
在倒排索引中抽取粒度匹配且范围匹配的...补充说明
到现在, 我们已经了解数值型范围查询的算法核心思想了.
但是讲解的过程中为了方面理解, 都是用10进制作为粒度来说明的, 实际lucene处理的时候是用2进制, 不过思想是完全一样的....作者在理解算法的过程中, 一开始使用10进制实现了一套算法, 然后稍加修改, 就改成了和lucene一样的2进制的.
这里大概说一下lucene使用的2进制粒度的概念.