一:建立索引和讀取索引的過程如下圖:
二:索引在索引庫中的存放形式如下圖:
這是內容庫 這是目錄庫
IndexWriter按加入的順序爲Document指定一個遞增的id(從0開始),稱爲文檔id。反向索引中存儲的是這個id,文檔存儲中正向索引也是這個id。 業務數據的主鍵id只是文檔的一個字段。
爲從原數據中拿完整數據去展示,一個Document應該包含一個或多個存儲字段來唯一標識一條原數據。
三:創建索引以及存儲文檔的域時的規則如下:
創建好Document後,需要給Document添加Field,不同的Field有不同索引、分詞和存儲規則。
1:什麼樣的域需要被存儲?
查詢時,需要從Document中獲取的內容對應的域都應該被存儲。
2:什麼樣的域需要被索引?
要被搜索的域需要被索引。
3:什麼樣的域需要被分詞?
在被搜索時,可能只會輸入內容的一部分來查詢的域需要被分詞,例如:商品名稱,商品介紹,文章內容等;相反,在查詢時必須輸入內容的全部來查詢的域不能分詞,例如:訂單號,電話號碼等。
四:使用lucene提高數據庫中數據的查詢實時度的示意圖
需要注意DB中的哪些數據需要用來創建索引、哪些數據需要存到索引庫中的Document中,最終使用Document中能唯一標識DB中一條記錄的字段來查詢DB,獲取記錄的詳情。
好文章參考鏈接:
https://blog.csdn.net/weixin_42633131/article/details/82873731
https://www.cnblogs.com/lyhero11/p/5192732.html
https://www.cnblogs.com/leeSmall/p/8992708.html(這是一個系列的好文章)
疑問:
1:有關索引的選項中,還有更詳細的設置:詞頻,位置,偏移量等,短語查詢、臨近查詢,高亮顯示等功能,和位置、偏移量的關係是什麼?
2:IndexableFieldType 中的 docValuesType方法 就是讓你來爲需要排序、分組、聚合的字段指定如何爲該字段創建文檔->字段值的正向索引的。那麼排序、分組、聚合、分類查詢(面查詢)的字段到底怎麼使用??
3:默認情況下,查詢結果的排序是按得分的大小從大到小排序的嗎?得分到底是怎麼計算的?
4:如果加上排序字段後,得分的排序是不是就不用了,直接用排序字段的排序?
5:lucene的分詞器詳解?