# /

# Lucene官方文档

https://lucene.apache.org/core/documentation.html
https://lucene.apache.org/core/8_11_2/core/org/apache/lucene/codecs/lucene87/package-summary.html
https://lucene.apache.org/core/8_11_2/core/org/apache/lucene/codecs/lucene84/Lucene84PostingsFormat.html

# indices索引文件

#GET /_cat/indices?v=true&s=index
health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .apm-agent-configuration        PGesm8tMR5-3P6B4Mjl1kg   1   0          0            0       208b           208b
green  open   .apm-custom-link                1zbPHSHeR1OpsOT6AfsPCQ   1   0          0            0       208b           208b
green  open   .kibana-event-log-7.10.0-000001 KnD2CFXoQTqNHVX5HW2Izw   1   0          4            0     21.8kb         21.8kb
green  open   .kibana_1                       h-UYu9j0Rf27hz73MmQj7g   1   0         32           22     10.4mb         10.4mb
green  open   .kibana_task_manager_1          j6JqejVLT5mPXoL9-hIAuA   1   0          5           35    358.9kb        358.9kb
yellow open   easyes_document                 Mok0FvGQTke9JNKZ48UO_w   1   1          3            0      6.3kb          6.3kb
yellow open   ee-distribute-lock              -OnKsgorT2CQGXZkkZNYpQ   1   1          0            0       229b           229b
green  open   kibana_sample_data_ecommerce    gdH9u2JjS0-PswW9cK-Vig   1   0       4675            0        4mb            4mb
green  open   kibana_sample_data_flights      -t3mbN97QA-o-bITuq4CCQ   1   0      13059            0      5.4mb          5.4mb
green  open   kibana_sample_data_logs         AFZsix3NTs-jZ8cODkAvSQ   1   0      14074            0       10mb           10mb
yellow open   metrics_index                   WqAGTr2qQtq2tKRdzyrbcg   1   1          2            0      8.9kb          8.9kb
yellow open   my-index-000001                 xIyFBMm8T3eBe7ChG5ZeAA   1   1          4            0     20.5kb         20.5kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#kibana_sample_data_logs
/d/myopt/elasticsearch-7.10.0/data/nodes/0/indices/AFZsix3NTs-jZ8cODkAvSQ/0/index
$ ls -sh1
total 11M
1.0K _0.cfe
2.2M _0.cfs
1.0K _0.si
1.0K _1.cfe
2.9M _1.cfs
1.0K _1.si
1.0K _2.cfe
2.8M _2.cfs
1.0K _2.si
1.0K _3.cfe
2.3M _3.cfs
1.0K _3.si
1.0K segments_3
   0 write.lock
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#.kibana_1
/d/myopt/elasticsearch-7.10.0/data/nodes/0/indices/h-UYu9j0Rf27hz73MmQj7g/0/index
$ ls -sh1
total 11M
1.0K _jh.fdm
 11M _jh.fdt
1.0K _jh.fdx
4.0K _jh.fnm
1.0K _jh.kdd
1.0K _jh.kdi
1.0K _jh.kdm
1.0K _jh.nvd
1.0K _jh.nvm
1.0K _jh.si
4.0K _jh_2.fnm
1.0K _jh_2_Lucene80_0.dvd
1.0K _jh_2_Lucene80_0.dvm
4.0K _jh_Lucene80_0.dvd
4.0K _jh_Lucene80_0.dvm
1.0K _jh_Lucene84_0.doc
1.0K _jh_Lucene84_0.pos
4.0K _jh_Lucene84_0.tim
1.0K _jh_Lucene84_0.tip
4.0K _jh_Lucene84_0.tmd
1.0K _k1.cfe
4.0K _k1.cfs
1.0K _k1.si
1.0K segments_1c
   0 write.lock
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# FST压缩算法

Trie、FSA、FST分别存储以下key-value:abb=1,abbapp=2,abe=3,addapp=4
image.png

# FST的键值对

怎么表示abe与abbapp对应的字符串的值?
1、把值放在路径上,每个路径都是唯一的。
2、每个节点需要有自己的位置index
3、每个节点需要有出度列表(边列表)
(1)lable //表示“key字符串的字母”边的key
(2)output //表示“key字符串的字母”边的value
(3)next //表示下一节点的位置

# Postings压缩算法

倒排表是怎么存放文档ids的?
1、倒排表的采用一种名为RoaringBitmap压缩算法存放文档ids。
2、RoaringBitmap是基于Bitmap的优化。

# 倒排索引的核心组件

Term Dictionary

.tim文件包含每个字段中的术语列表,以及每个术语的统计信息(如docfreq)和指向.doc、.pos和.pay文件中频率、位置、有效载荷和跳过数据的指针。有关格式的更多详细信息,请参阅BlockTreeTermsWriter。

Term Index

.tip文件包含词条词典的索引,因此可以随机访问。有关格式的更多详细信息,请参阅BlockTreeTermsWriter。

Positions

.pos文件包含每个术语在文档中出现的位置列表。它有时还存储部分有效载荷和偏移量,以加快速度。

Frequencies and Skip Data

.doc文件包含包含每个术语的文档列表,以及该文档中术语的频率(省略频率时除外:Index Options.DOCS)。当文档列表的长度大于压缩块大小时,它还将跳过数据保存到每个压缩块或VInt块的开头。

# 倒排索引的基本架构

1、FST.key表示term的名称(字符串)。
2、FST.value表示term在倒排表的位置(数字)。
3、FST.key的前缀作为TermIndex的key,数据结构是Trie。
4、FST.key的后缀作为在TermDict的key。
5、PostingList倒排表的数据结构是RoaringBitmap。
注意:详见源码或官方文档。
image.png