参考答案:
在 Elasticsearch 中,倒排索引(Inverted Index)是核心的技术之一,它使得文本搜索变得高效。在倒排索引中,**每个词(term)**都对应一个列表,列出了包含该词的文档。这种索引结构允许 Elasticsearch 在查询时快速查找包含特定词的文档,类似于传统书籍中的索引。
文档的分词:
当文档被索引时,Elasticsearch 会对文档内容进行 分词(Tokenization),将文本拆分成一系列的 词(terms)。例如,一篇文档内容为:
"Elasticsearch is a distributed search engine"
被拆分成的词可能是:
["Elasticsearch", "is", "a", "distributed", "search", "engine"]
倒排索引的构建:
假设有两个文档:
"Elasticsearch is a search engine""Elasticsearch is distributed"分词后,倒排索引可能如下所示:
"Elasticsearch" -> [1, 2] (在文档 1 和 2 中都出现)
"is" -> [1, 2] (在文档 1 和 2 中都出现)
"a" -> [1] (仅在文档 1 中出现)
"distributed" -> [2] (仅在文档 2 中出现)
"search" -> [1] (仅在文档 1 中出现)
"engine" -> [1] (仅在文档 1 中出现)
查找倒排索引:
"Elasticsearch",倒排索引会返回 [1, 2],表示这个词出现在文档 1 和文档 2 中。多词查询:
"Elasticsearch search",Elasticsearch 会查找:
"Elasticsearch" -> [1, 2]"search" -> [1][1],即文档 1 包含这两个词。权重与相关性评分:
倒排索引不仅仅存储词与文档的映射,还可能包含关于每个词的 位置(Positional Indexing)、频率(Term Frequency, TF)等信息,以便对文档进行 相关性评分,计算该文档与查询的匹配度(如 TF-IDF 评分)。
例如,如果查询词 "Elasticsearch" 在文档中出现了 3 次,而其他文档中仅出现了 1 次,那么文档 1 的相关性评分就更高。
假设有 3 个文档,如下:
当查询词是 "Elasticsearch search" 时,Elasticsearch 的查询过程如下:
"Elasticsearch" 在倒排索引中返回的文档是 [1, 2]。"search" 在倒排索引中返回的文档是 [1, 3]。[1],表示 文档 1 包含这两个词。最近更新时间:2024-12-12