
在了解Lucene之前,什搜索引索??引識點(diǎn)我們先看下什么是??擎帶擎知搜索引擎?
在實(shí)際的項目中,我們可能會(huì )寫(xiě)了類(lèi)似這樣的解搜SQL。
按標題(ti)模??糊查詢(xún),什搜索引索引識點(diǎn)查詢(xún)標題與xxxxx有關(guān)的擎帶擎知新聞:
select * from t_news where title like ‘%xxxxx%’;按關(guān)鍵字查詢(xún) ,如查詢(xún)與x(╯°□°)╯xxx有關(guān)的解搜新聞:
select * from t_news where title like '%蒼老師%' or content like '%蒼老師'’;當數據量變大時(shí),這四個(gè)查詢(xún)都變慢了,什搜索引索引識點(diǎn)我們可能會(huì )建立索引,但是擎帶擎知有的like語(yǔ)句會(huì )使索引失效。
可能有的解搜需求對搜索的結果進(jìn)項相關(guān)度排名的顯示,對應的什搜索引索引識點(diǎn)sql是(shi)否可以滿(mǎn)足需求嗎?
例如:
要查詢(xún) 中國、冠狀病毒、擎帶(╯°□°)╯︵ ┻━┻擎知復工有關(guān)的解搜新聞:
含有三個(gè)關(guān)鍵字(相關(guān)度最高)的新聞排前面
含兩個(gè)關(guān)鍵字(相關(guān)度次之),排次之
含一個(gè)關(guān)鍵字 的什(?????)搜索引索引識點(diǎn),排次次之。擎帶擎知
這時(shí)利用數據庫sql實(shí)現還是解搜比較困難的。
數據庫適合結構化數據的精確查詢(xún),而不適合半結構化、非結構化數據的模糊查詢(xún)及靈活搜索(特別是數據量大時(shí)),無(wú)法提供想要的實(shí)時(shí)性。
這個(gè)問(wèn)題(ti),一(?????)個(gè)解決思路是:
我們查詢(xún)時(shí),輸入的是冠狀病(??ヮ?)?*:???毒,想要得到標題或內容中包含“冠狀病( ?ヮ?)毒”的新聞列表。┐(′ー`)┌
上面建立索引就是倒排索引,或者又叫做反向索引。
例如:
內容類(lèi)索引:
這么多的詞,那么需要建立多少個(gè)詞呢?
反向索引的記錄數會(huì )不會(huì )很大?
通過(guò)上面的看,詞的總數也不多,那怎么分詞,也就是怎么把一???句話(huà)分??成很多常用的詞??呢?
這時(shí)就(jiu)需要用到了分詞器。
分詞器分詞器,可以將一段語(yǔ)句分出若干個(gè)詞。
英文:this is my car 分詞后:this,is,my,car
中文:今日頭條厲害。今日頭條,厲害
常用的中文分詞器:
word分詞器,Stanford分詞器,Ansj???分詞器,smartcn分詞器,FudanNLP分詞器,
有了分詞器,還可以獲取詞在文章的位置,出現的次??數。此時(shí)可以這樣的索引:
詞:中國,
內容包含該詞的(de)文章id:
{ { 1,2,{ 21,32}},{ 5,3,{ 18,29,45}}}
1:文章id
{ 21,22}:出現的位置
步驟1: 對搜索輸入的內容進(jìn)行分詞
步驟2: 在反(fan)向索引中找出包含中國、復工的文章列表
步驟3: 合并兩個(gè)列表,排序輸出
{ 1,12,8,5}
輸出結果,那怎么排序輸入結果呢?把最關(guān)注的放到最前面。怎么建立一個(gè)相關(guān)性評估模型?
這時(shí)可以按照詞的出現的次數建立模(???)型,當然還有其他的模型來(lái)面對更復雜的場(chǎng)景。ヽ(′▽?zhuān)?ノ
統計出現次數,根據次數從高到低排:
中國
排序后:
{ { 1,5},{ 5,3},{ 12,1},{ 8,1}}
文章id為1,總(zong)共出現了5詞,文章id為5的出現了ヾ(′▽?zhuān)??3詞。。。
其他(′?ω?`)的復雜的相關(guān)性計算模型有:
tf-idf 詞頻-逆文檔率模型向量空間模型貝葉斯概率模型,如: BM25搜索引擎中會(huì )提供一種、或?多種實(shí)現供選擇使用,也會(huì )提供擴展。
電商網(wǎng)站中的搜索相關(guān)性計算會(huì )考慮更多,更復雜。
這里引入什么是搜索引擎?
搜索引擎一套可(′▽?zhuān)?對大量結構化、半結構化數據、非結構化文本類(lèi)數據進(jìn)行實(shí)時(shí)搜索的專(zhuān)門(mén)軟件。
搜索引擎專(zhuān)門(mén)解決大??量結構化、半結構化數據、非結構化文本類(lèi)數據的實(shí)時(shí)檢索問(wèn)(′?ω?`)題。這種實(shí)時(shí)搜索數據庫做不了。
使用場(chǎng)景:
信息檢索(如電子圖書(shū)館、電子檔案館)網(wǎng)┐(′?`)┌頁(yè)搜索內容提供網(wǎng)站的內容搜索(如 新聞(′ω`*)、論壇、博客網(wǎng)(′ω`)站)電子商務(wù)網(wǎng)站的商品搜索如果你負責的系統數??據量大,通過(guò)數據庫檢索慢,可以考慮用搜索引擎來(lái)專(zhuān)門(mén)負責檢索。核心部件:
數據源分詞器反向索引(倒排索引)相關(guān)性計算模型工作原理:
從數據源加載數據,分詞、建立反向索引搜索時(shí),對搜索輸入進(jìn)行分詞,查找反向索(????)引計算相關(guān)性,排序,輸出Nutch:Apache頂級開(kāi)源項目,包含網(wǎng)絡(luò )爬蟲(chóng)和搜索引擎((╬?益?)基于lucene)的系(xi)統(同(′?ω?`)百度、google)。Hadoop因它而生。
Solr:Lucene下的子項目,基于Lucene構建的獨立的企業(yè)級開(kāi)源搜索平臺,一??個(gè)服務(wù)。它提供了基于xml/JSON/http的(de)api供外界訪(fǎng)問(wèn),還有web管理界面。
Elasticsearch:基于Lucene的企業(yè)級分布式搜索平臺,它對外??提供restful-web接口,讓程序員可以輕松、方便使用搜索平臺,而不需要了解Lucene。