- 自己動手寫分布式搜索引擎
- 羅剛
- 419字
- 2020-11-28 15:52:46
3.2.8 靈活索引
以前,可以通過聲明列屬性來說明是否存儲詞在文檔中的位置信息,如Field.TermVector.WITH_POSITIONS_OFFSETS。但這樣的方式不夠靈活,需要能夠用任意有效的組合來說明倒排索引中存什么內容。例如,有時候也許并不關心詞在文檔中出現了多少次。有下面4種有效的索引格式:
(1) <doc>+
(2) <doc, boost>+
(3) <doc, freq, <position>+ >+
(4) <doc, freq, <position, boost>+ >+
例如可以只存文檔編號,如(1)所示;或者還附加文檔的加權信息,如(2)所示;或者還存儲位置信息,如(3)所示;或者給不同位置的詞設置不同的加權,如(4)所示。
這要求每個列設置如下的布爾值:
(1) freq。
(2) document boost。
(3) position (要求頻率)。
(4) position boost (要求位置)。
索引選項枚舉類型定義如下:
public static enum IndexOptions { DOCS_ONLY, //僅索引文檔 DOCS_AND_FREQS, //索引文檔和頻率 DOCS_AND_FREQS_AND_POSITIONS, //索引文檔、頻率和詞的位置 DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS, //索引文檔、頻率、詞的位置 //以及字符偏移量 };
可以在設置列類型的時候設置索引選項。
FieldType fieldType = new FieldType(); fieldType.setStoreTermVectors(true); fieldType.setStoreTermVectorPositions(true); fieldType.setIndexed(true); fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS); //索引文檔和頻率 fieldType.setStored(true); Document doc = new Document(); doc.add(new Field("content", content, fieldType));
對于寫入索引,如何寫入很重要。應用程序應該可以很容易地存儲新的東西到索引。或者更改現有東西的編碼,例如更改文檔編號、位置、payloads等的編碼方式。
推薦閱讀
- VR新未來
- 3ds Max 2014標準教程(全視頻微課版)
- UG NX 12.0中文版完全自學一本通
- Beginning Swift
- ERP沙盤模擬教程
- CakePHP 1.3 Application Development Cookbook
- Apache Roller 4.0 – Beginner's Guide
- ChronoForms 3.1 for Joomla! site Cookbook
- Illustrator CC 2018中文版入門與提高
- 中文版CorelDRAW X8基礎培訓教程(全彩版)
- Ogre 3D 1.7 Beginner's Guide
- CAD/CAM軟件應用技術
- Unity 3D\2D手機游戲開發:從學習到產品(第4版)
- Instant Flask Web Development
- 剪映短視頻剪輯從入門到精通:宣傳短片+電商視頻+產品廣告+活動慶典