本節書摘來華章計算機《深入了解elasticsearch(原書第2版)》一書中的第2章 ,第2.2.2節,[美]拉斐爾·酷奇(rafal ku) 馬雷克·羅戈任斯基(marek rogoziski)著 張世武 餘洪淼 商旦 譯 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
現在我們回到lucene。如果你還記得lucene反向索引是如何建構的,你會指出反向索引中包含了詞項、詞頻以及文檔指針(如果忘了,請重新閱讀1.1節)。現在我們看看之前存儲到clients索引中的資料大概是如何組織的。

term這一列非常重要。如果我們去探究elasticsearch和lucene的内部實作,将會發現字首查詢被改寫為下面這種查詢:
我們可以用elasticsearch api來檢查重寫片段。首先,使用explain api執行如下指令:
執行結果如下:
可以看到,elasticsearch對name字段使用了一個詞項是joe的constant_score查詢。當然,這一步發生在lucene中,elasticsearch實際上隻是從緩存中擷取這些詞項。這一點可以用validate查詢api來驗證。
elasticsearch傳回的結果如下: