強大搜索引擎背後的秘密——ElasticSearch基本概念解析

軟件求生 2024-04-12 10:11:08

大家好,我是小米!今天我要和大家分享的是關于ElasticSearch的基本概念,特別是IK分詞器、索引、映射以及文檔等方面的知識。作爲一名熱愛技術、喜歡分享的小編,我希望通過這篇文章,能夠幫助大家更好地了解ElasticSearch,提升大家在技術面試中的競爭力!

IK分詞器

IK分詞器是ElasticSearch中一種專門用于處理中文文本的分詞器。它的作用是將輸入的中文文本按照一定規則切分成一個個獨立的詞語,爲後續的檢索和分析提供支持。與傳統的分詞器相比,IK分詞器更加智能和高效,能夠根據中文語境進行詞語切分,提高了搜索的准確性和效率。IK分詞器的出現,爲中文文本的全文檢索提供了有力的工具和支持。

IK分詞器3.0的特性

IK分詞器3.0是在IK分詞器的基礎上進行了全面升級和優化,帶來了許多新的特性和功能,讓我們一起來了解一下吧!

IK分詞器3.0采用了一種獨特的“正向叠代最細粒度切分算法”,這種算法具有高效、准確的特點。它能夠將文本快速、精准地切分成最小的詞語單位,爲後續的索引和檢索提供了可靠的基礎。同時,這種算法還具有較高的處理速度,達到了每秒60萬字的高速處理能力,大大提升了系統的性能。

IK分詞器3.0引入了多子處理器分析模式,通過同時處理多個子分詞器,充分利用了多核處理器的性能優勢,提高了分詞器的並發處理能力。這種模式不僅提升了分詞器的效率,還增強了系統的穩定性和可靠性。

IK分詞器3.0支持個人詞條的優化的詞典存儲,用戶可以根據自身需求進行詞典存儲優化,避免了傳統詞典存儲方式的內存浪費問題,提升了系統的內存利用率和性能表現。同時,更小的內存占用也爲系統的部署和運行帶來了便利。

IK分詞器3.0還引入了針對Lucene全文檢索優化的查詢分析器IKQueryParser,通過采用歧義分析算法優化查詢關鍵字的搜索,提高了檢索的准確性和效率。這使得系統在面對複雜的檢索需求時能夠更加靈活和高效地處理,爲用戶提供更優質的搜索體驗。

排列組合是IK分詞器3.0的一個重要特性,它能夠通過排列組合的方式,極大地提高Lucene檢索的命中率。這意味著系統能夠更加准確地匹配用戶的檢索關鍵詞,從而提升搜索結果的質量和准確性,滿足用戶對于搜索結果的高要求。

IK分詞器3.0還提供了ext_dict功能,用于存儲個人詞條等自定義詞典。用戶可以根據自身的業務需求,將自定義的詞條加入到詞典中,提高分詞器對特定領域的適應性和准確性。

stop_dict是IK分詞器3.0的一個停用詞詞典,用戶可以在其中定義一些常見的停用詞,如“的”、“是”等,用于過濾掉一些無關緊要的詞語,提升檢索的准確性和效率。

同義詞詞典是IK分詞器3.0的另一個重要功能,用戶可以在same_dict中定義一些同義詞,如“手機”、“電話”等,幫助擴展檢索範圍,提升檢索的全面性和准確性。

索引(類數據庫)

在ElasticSearch中,索引類似于傳統數據庫中的數據庫,它是用于存儲和組織文檔數據的邏輯集合。每個索引都包含了一系列的文檔,每個文檔都是一個JSON對象。索引在ElasticSearch中具有非常重要的作用,它決定了文檔的存儲方式、搜索效率以及數據的分片和副本等參數。

設置索引庫:在創建索引時,我們可以設置一些參數,如分片數、副本數等,來優化索引的性能和可靠性。分片數決定了索引在存儲和搜索時的並行性能,副本數則決定了數據的可靠性和容錯能力。通過合理設置這些參數,可以充分發揮ElasticSearch的性能優勢,提升系統的穩定性和可靠性。

定義索引庫的分片數副本數等:在定義索引庫時,我們還可以指定一些其他參數,如分片路由、數據節點、映射類型等,來進一步優化索引的性能和功能。分片路由可以根據文檔的某個字段值進行數據的分片和存儲,提高數據的分布均衡性和搜索效率;數據節點則決定了索引的數據存儲位置,可以根據業務需求進行靈活配置;映射類型則用于定義文檔的字段類型和分詞器,影響了數據的搜索和分析效果。

映射(類表設計)

在ElasticSearch中,映射類似于傳統數據庫中的表設計,它定義了文檔中各個字段的數據類型、分詞器類型以及是否需要進行存儲或者創建索引等信息。映射在ElasticSearch中扮演著非常重要的角色,直接影響了文檔的存儲結構、搜索效率以及數據的分析和可視化等功能。

字段的數據類型:在映射中,我們需要爲每個字段指定合適的數據類型,包括字符串、整數、浮點數、日期等。合理選擇字段的數據類型可以提高系統的存儲效率和搜索性能,避免不必要的數據類型轉換和存儲空間浪費。

分詞器類型:分詞器類型用于指定文檔中某個字段的分詞器,不同的字段可以采用不同的分詞器來滿足不同的檢索需求。常用的分詞器類型包括標准分詞器、IK分詞器、Whitespace分詞器等,用戶可以根據實際需求選擇合適的分詞器類型。

是否要進行存儲或者創造索引:在映射中,我們還可以指定某個字段是否需要進行存儲或者創建索引。如果需要對某個字段進行全文檢索或者聚合分析,則需要將其創建索引;如果某個字段只需要在文檔中存儲,而不需要進行搜索或者分析,則可以選擇不創建索引,以節省存儲空間。

其他映射屬性:除了上述基本屬性外,映射還可以定義一些其他屬性,如字段的分析器、索引分片、數據節點路由等。通過合理設置這些屬性,可以進一步優化映射的性能和功能,滿足不同業務場景下的需求。

文檔(數據)

在ElasticSearch中,文檔是組成索引的基本單位,類似于傳統數據庫中的數據行。每個文檔都是一個JSON格式的數據對象,包含了一條完整的記錄信息。文檔可以是結構化的數據,也可以是非結構化的數據,它們以鍵值對的形式存儲在索引中。

全量更新用Put:當我們需要更新文檔的全部字段時,可以使用全量更新(Put)的方式。通過發送一個包含完整文檔信息的HTTP請求,ElasticSearch會將原有的文檔替換爲新的文檔。這種更新方式適用于需要一次性更新全部字段的場景,可以保證文檔的數據完整性和一致性。

局部更新用Post:相比之下,局部更新(Post)則是在原有文檔的基礎上進行部分字段的更新。通過發送一個包含待更新字段信息的HTTP請求,ElasticSearch會將指定字段更新爲新的值,而保持其他字段的不變。這種更新方式適用于只需更新部分字段的場景,可以減少網絡傳輸和系統資源的消耗,提高更新效率和性能。

文檔的數據結構:文檔的數據結構由其所屬的索引的映射類型定義,包含了各個字段的數據類型、分詞器類型等信息。在ElasticSearch中,文檔的數據結構可以根據實際需求進行動態映射或者靜態映射,靈活適應不同的數據模型和業務場景。

文檔的唯一標識:每個文檔在索引中都有一個唯一的標識符,稱爲文檔ID。文檔ID可以由ElasticSearch自動生成,也可以由用戶指定,用于唯一標識和檢索文檔。在進行文檔的增刪改查操作時,需要指定文檔的ID來確定操作對象。

END

通過本文的介紹,相信大家對ElasticSearch的基本概念有了更深入的了解。在面試中,對于這些基本概念的掌握將會爲我們的技術面試增添不少優勢。希望大家能夠通過不斷學習和實踐,提升自己的技術水平,成爲技術領域的佼佼者!感謝大家的閱讀,我們下期再見!

0 阅读:88

軟件求生

簡介:從事軟件開發,分享“技術”、“運營”、“産品”等。