面试题答案
一键面试文档处理
- 文本提取:当一个文档被添加到ElasticSearch时,首先会从文档中提取文本内容。例如,对于一个包含多种格式(如HTML、PDF等)的文档,会先将其转换为纯文本。
- 分词:提取的文本会被传递给分词器(Tokenizer)。分词器按特定规则将文本拆分成一个个单词或术语,这些单词或术语称为词条(Term)。比如对于句子 “The quick brown fox jumps over the lazy dog”,英文分词器可能会将其分成 “the”“quick”“brown”“fox”“jumps”“over”“lazy”“dog” 等词条。
词条生成
- 标准化:生成的词条可能会经过标准化处理,如将所有字母转换为小写,去除停用词(如 “the”“a”“an” 等在搜索中通常不重要的词)。例如,处理后 “The” 会变成 “the”,并且 “the” 可能会因是停用词而被去除。
- 词干提取或词形还原:对于一些语言,可能会进行词干提取(如将 “running” 转换为 “run”)或词形还原(如将 “goes” 还原为 “go”),以确保同一词的不同形式能被关联起来。
倒排索引表结构
- 词条字典:倒排索引的核心部分是一个词条字典(Term Dictionary),它包含所有唯一的词条。这个字典通常采用高效的数据结构(如FST - Finite State Transducer)存储,以支持快速的查找。每个词条在字典中有一个对应的指针,指向包含该词条的文档列表。
- 文档列表(Postings List):对于每个词条,都有一个与之关联的文档列表,也叫Postings List。列表中记录了包含该词条的所有文档的信息,一般包括文档ID、词条在文档中的位置(可选,用于短语搜索等)、词条出现的频率等。例如,对于词条 “fox”,其Postings List可能包含文档ID为1、3、5的文档,以及 “fox” 在这些文档中的出现频率和位置等数据。这样当进行搜索时,通过词条字典快速定位到相关词条,再从其Postings List获取包含该词条的文档,从而实现高效的搜索。