什么是搜索引擎

在了解Lucene之前,我們先看下什么是搜索引擎?

在實際的項目中,我們可能會寫了類似這樣的SQL。

按標題模糊查詢,查詢標題與xxxxx有關的新聞:

select*fromt_newswheretitlelike‘%xxxxx%’;

按關鍵字查詢,如查詢與xxxx有關的新聞:

select*fromt_newswheretitlelike%蒼老師%orcontentlike%蒼老師’;

當,這四個查詢都變慢了,我們可能會建立索引,但是有的like語句會使索引失效。

可能有的需求對搜索的結果進項相關度排名的顯示,對應的sql是否可以滿足需求嗎?

例如:

要查詢中國、冠狀病毒、復工有關的新聞:

含有三個關鍵字(相關度最高)的新聞排前面

含兩個關鍵字(相關度次之),排次之

含一個關鍵字的,排次次之。

sql實現還是比較困難的。

數據庫適合結構化數據的精確查詢,而不適合半結構化、非結構化數據的模糊查詢及靈活搜索(特別),無法提。

這個問題,一個解決思路是:

,輸入的是冠狀病毒,想要得到標題或內容中包含“冠狀病毒”的新聞列表。

如果標題、內容列上都有一個這樣的索引,里面能快速找到與冠狀病毒關鍵字對應的文章id,再根據文章id就可以快速找到文章了。

倒排索引

上面建立索引就是倒排索引,或者又叫做反向索引。

例如:

標題列索引:


內容類索引:


這么多的詞,那么需要建立多少個詞呢?

反向索引的記錄數會不會很大?


通過上面的看,詞的總數也不多,那怎么分詞,也就是怎么把一句話分成很多常用的詞呢?

。

分詞器

分詞器,可以將一段語句分出若干個詞。

英文:thisismycar分詞后:this,is,my,car

中文:。,厲害

常用的中文分詞器:

word分詞器,Stanford分詞器,Ansj分詞器,smartcn分詞器,FudanNLP分詞器,

IKAnalyzer分詞等。

有了分詞器,還可以獲取詞在文章的位置,出現的次數。:

詞:中國,

內容包含該詞的文章id:

{{1,2,{21,32}},{5,3,{18,29,45}}}

1:文章id

2:出現的次數

{21,22}:出現的位置

建立好了這樣的反向索引,那怎么索引呢?

步驟1:對搜索輸入的內容進行分詞

步驟2:在反向索引中找出包含中國、復工的文章列表


步驟3:合并兩個列表,排序輸出

{1,12,8,5}

輸出結果,那怎么排序輸入結果呢?把最關注的放到最前面。怎么建立一個相關性評估模型?

數建立模型,當然還有其他的模型來面對更復雜的場景。

統計出現次數,根據次數從高到低排:

中國


排序后:

{{1,5},{5,3},{12,1},{8,1}}

文章id為1,總共出現了5詞,文章id為5的出現了3詞。。。

其他的復雜的相關性計算模型有:

tf-idf詞頻-逆文檔率模型向量空間模型貝葉斯概率模型,如:BM25

搜索引擎中會提供一種、或多種實現供選擇使用,也會提供擴展。

會考慮更多,更復雜。

這里引入什么是搜索引擎?

搜索引擎

一套可對大量結構化、半結構化數據、非結構化文本類。

最早應用于信息檢索領域,經谷歌、百度。后又搜索?,F廣泛應用于各行業、。

搜索引擎專門解決大量結構化、半結構化數據、非結構化文本。。

使用場景:

信息檢索(如電子圖書館、電子檔案館)內容搜索(如新聞、論壇、)責的系統數據量大,通過數據庫檢索慢,可以考慮用搜索引擎來專門負責檢索。

核心部件:

數據源分詞器反向索引(倒排索引)相關性計算模型

工作原理:

從數據源加載數據,分詞、建立反,對搜索輸入進行分詞,查找反向索引計算相關性,排序,輸出

開源搜索引擎組件、系統:


Lucene:Apache頂級開源項目,Lucene-core是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的框架,提供了完整的查詢引擎和索引引擎,部分文本分詞引擎(英文與德文兩種西方語言)。Lucene的目的是為軟件開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。

Nutch:Apache頂級開源項目,(基于lucene)的系統(同百度、google)。Hadoop因它而生。

Solr:Lucene下的子項目,基于Lucene構建的獨立的企業級開源搜索平臺,一個服務。它提供了基于xml/JSON/http的api供外界訪問,還有web管理界面。

Elasticsearch:基于Lucene的企業級分布式搜索平臺,它對外提供restful-web接口,讓程序員可以輕松、方便使用搜索平臺,而不需要了解Lucene。

收藏
0
有幫助
0
沒幫助
0
免费无码av一区二区