搜索在電腦中的地位十分重要

来源:https://www.cnblogs.com/liaowanzhong/archive/2023/10/18/17771298.html
-Advertisement-
Play Games

無論是在內部系統還是在外部的互聯網站上,都少不了檢索系統。數據是為了用戶而服務。電腦在採集數據,處理數據,存儲數據之後,各種客戶端的操作pc機或者是移動嵌入式設備都可以很好的獲取數據,得到 想要的數據服務。 檢索分為SQL過濾查詢和全文檢索。數據都是放在資料庫里,資料庫里的數據量太大,要檢索到精準 ...


 

無論是在內部系統還是在外部的互聯網站上,都少不了檢索系統。數據是為了用戶而服務。電腦在採集數據,處理數據,存儲數據之後,各種客戶端的操作pc機或者是移動嵌入式設備都可以很好的獲取數據,得到 想要的數據服務。

 

檢索分為SQL過濾查詢和全文檢索。數據都是放在資料庫里,資料庫里的數據量太大,要檢索到精準的數據是需要很好的用戶體驗。用戶對響應時長要求特別嚴格,最好控制在一定的響應時間內。SQL查詢是普通的欄位過濾,一般在沒有走全表掃描的情況下都是性能較好的數據查詢方式。全文檢索的實現方式是在資料庫設計的時候就有這些模塊,比如MySQL的全文檢索。之後在市面上有公司開發了成型的開源產品,比如Lucene等。    學過luncene框架,  能就是論事。在銀行工作的時候有接觸過es框架,到現在也沒仔細去弄懂。每個人的學習能力不一樣,有的工程師削尖了腦袋要去專研每個技術。    是在學習Java開發框架的時候接觸過Lucene框架, 跟著源碼敲了一遍那個搜索引擎。對於那種根據分詞查詢數據的方式有深刻的映像,但是並不是每個系統都是要使用全文檢索分詞搜索。

 

按需開發,意思就是根據需求進行商業開發。以用戶體驗為中心,金錢盈利為目的。沒有誰在為 做無用功,得到與失去,不要去說,也說不准。像普通的欄位搜索看起來十分簡單,其實就是很簡單。但是如果遇到數據量大的情況,或者是用戶不會使用系統的情況下,都是有問題的。像百度,Google,搜什麼就有什麼,這就是全文檢索。

 

搜索,依賴於搜索引擎。搜索引擎的建立是十分困難的事情。以  現在的水平理解的搜索,  能說個大概。  做Java 6年時間,雖然沒有寫過搜索引擎,但是沒有經驗的同學可以去嘗試著實踐下。做任何系統都是需要構建bs架構或者是cs架構,cs架構是client-server架構。

 

在操作系統中有客戶端軟體開發包,bs架構是broswer-server架構,在所有的數據操作都是在瀏覽器中實現,把瀏覽器當做一個子系統,子系統上面又有很多應用程式... bs架構是特殊的cs架構。

 

在大學學習電腦編程開發,首選的語言是C++。那種語言是寫客戶端軟體, 也是學的很糾結,以為沒有很好的效果。大三休學的時候學習了Java,接觸全文檢索,學習了前端頁面的設計開發,後臺資料庫的建立。到現在有更多的想法和思考。爬蟲的建立,爬蟲是怎麼從網站上爬數據,用戶是怎麼在網站上面搜索數據。

 

大學畢業之後對於搜索引擎的理解畫了個草圖

 

 

 

 

像  爬蟲

 

 

 

 

一般的java IDE的debug是這樣設計

 

 

 

 

 

爬蟲是怎麼在網站上爬數據,為什麼  能爬網站的數據。現在的web瀏覽器都支持HTML標簽編輯的網頁,HTML標簽頁是dom元素。每個DOM元素都是一個實體對象,在資料庫中體現的就是dom元素實體對象表。Dom元素表裡存放的就是網頁標簽所承載的基礎數據和一些基本屬性。每當一個網站上面的標簽包裹的數據發生變化,就要觸發數據寫write事件,即 WriteEventListener,更新索引庫里的索引數據,和文檔庫里的文檔數據。這種數據更新同步方式叫做即時同步方式,是的資料庫里的數據和索引庫里的數據保持一致性。用戶查詢數據的時候總能查到最新的數據,用戶查數據都是走索引庫再走文檔庫,這樣性能更好。

 

至於怎麼構建dom元素資料庫,怎麼構建dom元素索引庫。那些都是商業庫,需要開發註冊維護,就像   在某個地方開商店一樣,需要辦理很多手續。

 

當時學習操作lucene 框架架構方式是通過AOP的方式實現數據同步。數據同步是文檔庫和索引庫的同步操作方式。文檔庫存放的是Document 文檔對象,索引庫存放的是欄位對象 Field 。欄位對象 分為索引文檔號和經歷過分詞器分詞之後的關鍵字集合。中文分詞器是Analyzer 堆中文的語句進行分詞。

 

中文的分詞器對中文語句的此法進行分析。中文的語句分為 主+謂+賓+定+狀+補 . 分詞器分為標準的國際分詞器和中國大陸簡體的中文分詞器。原理十分相似,實詞和虛詞需要區分。實詞是名詞,虛詞是冠詞,語氣詞,稱謂詞,形容詞,狀態詞,補語詞,謂語詞 。分詞器分析網站上面的文章關鍵字,中文摘要,具體的文章正文內容。分詞器的分詞結果生成關鍵字和文檔索引組裝成的欄位 Field 對象。欄位對象集合 fieldList 放在lucene 索引庫中。文檔庫中存放大量的文檔對象,文檔Document 與 欄位 Field 對象的索引表中的文檔索引關聯。

 

用戶在前端使用日用語句在lucene搜索引擎中搜索數據集合的過程十分複雜。簡單的過程可以分為

  1. 查詢語句詞的錄入接收。
  2. 後臺對中文查詢語句分詞,抽取關鍵字形成關鍵字集合。
  3. 使用關鍵字集合在lucene索引庫 中的關鍵字進行匹配,匹配成功會有文檔集合 documentList 。
  4. 文檔集合返回給業務邏輯層 service . 使用高亮器hlighter 對文檔中的存在的關鍵詞高亮。
  5. 文檔集合的返回通過評分對象 score 綜合得分排序。

a)       命中文檔的得分 score 有預設的得分規則和自定義得分規則。

 

數據同步在企業項目中使用很多。平安集團的hrx人力資源管理系統使用Elasticsearch 搜索引擎搜索數據。Lucene 和 Elasticsearch 兩種引擎搜索數據的方式都是全文檢索。全文檢索在資料庫軟體中普遍存在。企業的IDE 開發環境有搜索框的地方或許會有全文檢索的影子。軟體和應用程式系統都有數據。檢索方式分為通過表單的方式和一個表單輸入框的方式。一個表單輸入框的輸入方式面向的用戶是大眾化的互聯網網名。Java 的web信息系統安全新能和開發維護團隊有保障,使用sql 查詢語句查找數據的方式限制用戶量。內部系統的用戶量分為內部用戶和外圍用戶。使用sql查詢語句查詢數據使用全文檢索索引庫和文檔庫。數據查詢是否全表還是走索引表有用戶自定義,系統預設,AI 演算法相應的操作模式。

 

數據同步索引庫和文檔庫中的數據。同步平安銀行ES庫和PJ 庫中的數據。開發任務涉及到項目不同版本發佈的同步數據代碼。數據量大小和性能問題對於開發工程師是更高級別的操作。保證數據的正確性,代碼的質量高低。項目組之間的工程師都會相互借閱不同開發分支的代碼。每個開發都會有不同的編寫代碼的方式。

 

Elasticsearch 搜索原理和Lucene 類似。每個企業採用的技術架構選型不盡相同。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • mtools是一個基於Python實現的MongoDB工具集,旨在提供一系列功能,包括MongoDB日誌分析、報表生成以及簡易的資料庫安裝等。它由MongoDB原生的工程師單獨發起併進行開源維護。mtools包含了一些常用的組件,如mlaunch、mlogfilter、mplotqueries和ml... ...
  • 一、環境介紹 本文環境,以及本文所採用資料庫為GreatSQL 8.0.32-24 $ cat /etc/system-release Red Hat Enterprise Linux Server release 7.9 (Maipo) $ uname -a Linux gip 3.10.0-11 ...
  • 下載VM與Centos鏡像 用的 VM 17 版本: 該版本解決了老版本的一些藍屏問題和相容性問題 https://download3.vmware.com/software/WKST-1700-WIN/VMware-workstation-full-17.0.0-20800274.exe # 密鑰 ...
  • 接上一節:從零用VitePress搭建博客教程(2) –VitePress預設首頁和頭部導航、左側導航配置 五、預設主題相關細節配置 關於預設主題的標題,logo、頁腳,最後更新時間等相關細節配置,我們也是通過文件config.js中的themeConfig選項配置的,以下所有配置都是在themeC ...
  • 我的小冊 《CSS 技術揭秘與實戰通關》上線了,想瞭解更多有趣、進階、系統化的 CSS 內容,可以猛擊 - LINK。 最近大家刷抖音,是否有刷到拉斯維加斯的新地標 「Sphere」: 場館內部的視覺效果非常驚人,其中一個效果讓我虎軀一震: 我的第一想法就是,這個看起來用 CSS 也可以實現嘛?還有 ...
  • 本文總結了軟體開發過程中經常用到的基礎常識,分為基礎篇和實踐篇兩個篇章,其中基礎篇中著重講述了類,方法,變數的命名規範以及代碼註釋好壞的評判標準。實踐篇中從類,方法以及對象三個層面分析了常見的技術概念和落地實踐,希望這些常識能夠為讀者帶來一些思考和幫助。 ...
  • 架構的範疇太大太廣,本文嘗試從一個點切入闡述一下個人的認知。有太多相關性的問題想去闡述,比如SOA與BPM的結合、實踐過程中遇到的細節問題等等,為了比較乾凈的剖析SOA還是刪除掉了。希望各位看官有所收穫。 ...
  • 一、定義 組合多個對象形成樹形結構以表示具有部分-整體關係的層次結構。組合模式讓客戶端可以統一對待單個對象和組合對象。組合模式是一種結構型模式。 二、描述 包含以下三個角色:1、Component(抽象構件):它可以是介面或抽象類,為葉子構件和容器構件對象聲明介面,在該角色中可以包含所有子類共有行為 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...