且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene

更新时间:2022-02-27 16:06:24

本节书摘来华章计算机《深入理解Elasticsearch(原书第2版)》一书中的第2章 ,第2.2.2节,[美]拉斐尔·酷奇(Rafal Ku) 马雷克·罗戈任斯基(Marek Rogoziski)著 张世武 余洪淼 商旦 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2.2 回到Apache Lucene

现在我们回到Lucene。如果你还记得Lucene倒排索引是如何构建的,你会指出倒排索引中包含了词项、词频以及文档指针(如果忘了,请重新阅读1.1节)。现在我们看看之前存储到clients索引中的数据大概是如何组织的。

《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene


Term这一列非常重要。如果我们去探究Elasticsearch和Lucene的内部实现,将会发现前缀查询被改写为下面这种查询:
《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene

我们可以用Elasticsearch API来检查重写片段。首先,使用Explain API执行如下命令:
《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene

执行结果如下:
《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene

可以看到,Elasticsearch对name字段使用了一个词项是joe的constant_score查询。当然,这一步发生在Lucene中,Elasticsearch实际上只是从缓存中获取这些词项。这一点可以用Validate查询API来验证。
《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene
《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene

Elasticsearch返回的结果如下:
《深入理解Elasticsearch(原书第2版)》一2.2.2 回到Apache Lucene