lucene文件格式初探 (8.11)

2022-03-01  本文已影响0人  以梦为马驾驾驾

https://lucene.apache.org/core/8_11_1/core/org/apache/lucene/codecs/lucene87/package-summary.html#package.description

basic definitions

在不同field中的相同bytes, 被视为不同的term.So, term is represented as: field_name + field_value

索引

因为分词成term(s), 所以Lucene是term-based搜索, 如何分词影响到了search的效率和准确(结果)

field的类型

field可以被直接存储, 即它们的原文(text of a field)可以被直接存储stored, 也可以被倒排(tokeniezd into term)为索引indexed , 或者同时存在.
另外, 可以被tokenized为多个terms, 某些情况下也可以字面量的直接作为一个term.
更多信息可以org.apache.lucene.document.Field

segments段

indexs is composed of multi sub-indexes, called segments.每个段,都是一个完全独立的index, 可以被单独的搜索, 索引包括:

doc numbers

doc numbers是段内unique的, 不是全局, 在更大范围内使用的时候需要被转化为更大范围的情况.标准技术是给每个段一个范围的值, 当需要转化的时候,要使用到这个segment的base值, 当从外部转化为段内序号的时候, 首先利用range判断到哪个段内, 然后减去base值.
在doc被删除的时候, 序号列表会出现空洞, 当然最终在merge后,空洞被移除.

索引结构

每个seg都包含以下信息

NOTE: The term dictionary can plug into different postings implementations: the postings writer/reader are actually responsible for encoding and decoding the PostingsHeader and TermMetadata sections described here:
是否意味着: 我们可以自己写读取postings的实现?

索引选项:
0: not indexed
1: indexed as DOCS_ONLY
2: indexed as DOCS_AND_FREQS
3: indexed as DOCS_AND_FREQS_AND_POSITIONS
4: indexed as DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS

上一篇 下一篇

猜你喜欢

热点阅读