久久午夜无码,国产中文资源,Chinese熟女熟妇2乱2,高清五码d一区

當(dāng)前位置:首頁 > 軟件開發(fā) > 正文

solr搜索引擎 搜索引擎 開源

solr搜索引擎 搜索引擎 開源

大家好,關(guān)于solr搜索引擎很多朋友都還不太明白,不過沒關(guān)系,因為今天小編就來為大家分享關(guān)于開源的知識點,相信應(yīng)該可以解決大家的一些困惑和問題,如果碰巧可以解決您的問題...

大家好,關(guān)于solr搜索引擎很多朋友都還不太明白,不過沒關(guān)系,因為今天小編就來為大家分享關(guān)于開源的知識點,相信應(yīng)該可以解決大家的一些困惑和問題,如果碰巧可以解決您的問題,還望關(guān)注下本站哦,希望對各位有所幫助!

java如何實現(xiàn)搜索功能

先寫具體的實現(xiàn)代碼,具體的實現(xiàn)思路和邏輯寫在代碼之后。

搜索時用于排序的Bean

構(gòu)造的搜索數(shù)據(jù)結(jié)構(gòu)以及簡單的搜索算法

[java]viewplaincopyprint?/***@Description:*/packagecn.lulei.search.engine;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.HashMap;importjava.util.HashSet;importjava.util.List;importcn.lulei.search.engine.model.SortBean;publicclassSerachBase{//details存儲搜素對象的詳細信息,其中key作為區(qū)分Object的唯一標識privateHashMap<String,Object>details=newHashMap<String,Object>();//對于參與搜索的關(guān)鍵詞,這里采用的稀疏數(shù)組存儲,也可以采用HashMap來存儲,定義格式如下//privatestaticHashMap<Integer,HashSet<String>>keySearch=newHashMap<Integer,HashSet<String>>();//HashMap中額key值相當(dāng)于稀疏數(shù)組中的下標,value相當(dāng)于稀疏數(shù)組在該位置的值privatefinalstaticintmaxLength=Character.MAX_VALUE;@SuppressWarnings("unchecked")privateHashSet<String>[]keySearch=newHashSet[maxLength];/***@Description:實現(xiàn)單例模式,采用InitializationonDemandHolder加載*@Author:lulei*@Date:2014-7-19*@Version:1.1.0*/privatestaticclasslazyLoadSerachBase{privatestaticfinalSerachBaseserachBase=newSerachBase();}/***這里把構(gòu)造方法設(shè)置成私有為的是單例模式*/privateSerachBase(){}/***@return*@Date:2014-7-19*@Author:lulei*@Description:獲取單例*/publicstaticSerachBasegetSerachBase(){returnlazyLoadSerachBase.serachBase;}/***@paramid*@return*@Date:2014-7-19*@Author:lulei*@Description:根據(jù)id獲取詳細*/publicObjectgetObject(Stringid){returndetails.get(id);}/***@paramids*@return*@Date:2014-7-19*@Author:lulei*@Description:根據(jù)ids獲取詳細,id之間用","隔開*/publicList<Object>getObjects(Stringids){if(ids==null||"".equals(ids)){returnnull;}List<Object>objs=newArrayList<Object>();String[]idArray=ids.split(",");for(Stringid:idArray){objs.add(getObject(id));}returnobjs;}/***@paramkey*@return*@Date:2014-7-19*@Author:lulei*@Description:根據(jù)搜索詞查找對應(yīng)的id,id之間用","分割*/publicStringgetIds(Stringkey){if(key==null||"".equals(key)){returnnull;}//查找//idTimes存儲搜索詞每個字符在id中是否出現(xiàn)HashMap<String,Integer>idTimes=newHashMap<String,Integer>();//ids存儲出現(xiàn)搜索詞中的字符的idHashSet<String>ids=newHashSet<String>();//從搜索庫中去查找for(inti=0;i<key.length();i++){intat=key.charAt(i);//搜索詞庫中沒有對應(yīng)的字符,則進行下一個字符的匹配if(keySearch[at]==null){continue;}for(Objectobj:keySearch[at].toArray()){Stringid=(String)obj;inttimes=1;if(ids.contains(id)){times+=idTimes.get(id);idTimes.put(id,times);}else{ids.add(id);idTimes.put(id,times);}}}//使用數(shù)組排序List<SortBean>sortBeans=newArrayList<SortBean>();for(Stringid:ids){SortBeansortBean=newSortBean();sortBeans.add(sortBean);sortBean.setId(id);sortBean.setTimes(idTimes.get(id));}Collections.sort(sortBeans,newComparator<SortBean>(){publicintcompare(SortBeano1,SortBeano2){returno2.getTimes()-o1.getTimes();}});//構(gòu)建返回字符串StringBuffersb=newStringBuffer();for(SortBeansortBean:sortBeans){sb.append(sortBean.getId());sb.append(",");}//釋放資源idTimes.clear();idTimes=null;ids.clear();ids=null;sortBeans.clear();sortBeans=null;//返回returnsb.toString();}/***@paramid*@paramsearchKey*@paramobj*@Date:2014-7-19*@Author:lulei*@Description:添加搜索記錄*/publicvoidadd(Stringid,StringsearchKey,Objectobj){//參數(shù)有部分為空,不加載if(id==null||searchKey==null||obj==null){return;}//保存對象details.put(id,obj);//保存搜索詞addSearchKey(id,searchKey);}/***@paramid*@paramsearchKey*@Date:2014-7-19*@Author:lulei*@Description:將搜索詞加入到搜索域中*/privatevoidaddSearchKey(Stringid,StringsearchKey){//參數(shù)有部分為空,不加載//這里是私有方法,可以不做如下判斷,但為了設(shè)計規(guī)范,還是加上if(id==null||searchKey==null){return;}//下面采用的是字符分詞,這里也可以使用現(xiàn)在成熟的其他分詞器for(inti=0;i<searchKey.length();i++){//at值相當(dāng)于是數(shù)組的下標,id組成的HashSet相當(dāng)于數(shù)組的值intat=searchKey.charAt(i);if(keySearch[at]==null){HashSet<String>value=newHashSet<String>();keySearch[at]=value;}keySearch[at].add(id);}}}

測試用例:

[java]viewplaincopyprint?/***@Description:*/packagecn.lulei.search.engine.test;importjava.util.List;importcn.lulei.search.engine.SerachBase;publicclassTest{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSerachBaseserachBase=SerachBase.getSerachBase();serachBase.add("1","你好!","你好!");serachBase.add("2","你好!我是張三。","你好!我是張三。");serachBase.add("3","今天的天氣挺好的。","今天的天氣挺好的。");serachBase.add("4","你是誰?","你是誰?");serachBase.add("5","高數(shù)這門學(xué)科很難","高數(shù)確實很難。");serachBase.add("6","測試","上面的只是測試");Stringids=serachBase.getIds("你的高數(shù)");System.out.println(ids);List<Object>objs=serachBase.getObjects(ids);if(objs!=null){for(Objectobj:objs){System.out.println((String)obj);}}}}

測試輸出結(jié)果如下:

5,3,2,1,4,高數(shù)確實很難。今天的天氣挺好的。你好!我是張三。你好!你是誰?

這樣一個簡單的搜索引擎也就算是完成了。

問題一:這里面的分詞采用的是字符分詞,對漢語的處理還是挺不錯的,但是對英文的處理就很弱。

改進方法:采用現(xiàn)在成熟的分詞方法,比如IKAnalyzer、StandardAnalyzer等,這樣修改,keySearch的數(shù)據(jù)結(jié)構(gòu)就需要做下修改,可以修改為privateHashMap<String,String>[]keySearch=newHashMap[maxLength];其中key存儲分的詞元,value存儲唯一標識id。

問題二:本文實現(xiàn)的搜索引擎對詞元并沒有像lucene設(shè)置權(quán)重,只是簡單的判斷詞元是否在對象中出現(xiàn)。

改進方法:暫無。添加權(quán)重處理,使數(shù)據(jù)結(jié)構(gòu)更加復(fù)雜,所以暫時沒有對其做處理,在今后的文章中會實現(xiàn)權(quán)重的處理。

在SerachBase類中設(shè)置details和keySearch兩個屬性,details用于存儲Object的詳細信息,keySearch用于對搜索域做索引。details數(shù)據(jù)格式為HashMap,keySearch的數(shù)據(jù)格式為稀疏數(shù)組(也可以為HashMap,HashMap中額key值相當(dāng)于稀疏數(shù)組中的下標,value相當(dāng)于稀疏數(shù)組在該位置的值)。

對于details我就不做太多的介紹。

keySearch中數(shù)組下標(如用HashMap就是key)的計算方法是獲取詞元的第一個字符int值(因為本文的分詞采用的是字符分詞,所以一個字符就是一個詞元),該int值就是數(shù)組的下標,相應(yīng)的數(shù)組值就是Object的唯一標識。這樣keySearch的數(shù)據(jù)結(jié)構(gòu)就如下圖

因此想添加新紀錄的時候只需要調(diào)用add方法即可。

對于搜索的實現(xiàn)邏輯和上面的keySearch類似。對于id的搜索直接使用HashMap的get方法即可。對于搜索詞的一個搜索,整體的過程也是采用先分詞、其次查詢、最后排序。當(dāng)然這里面的分詞要和創(chuàng)建采用的分詞要一致(即創(chuàng)建的時候采用字符分詞,查找的時候也采用字符分詞)。

在getIds方法中,HashMap<String,Integer>idTimes=newHashMap<String,Integer>();idTimes變量用來存儲搜索詞中的詞元有多少個在keySearch中出現(xiàn),key值為唯一標識id,value為出現(xiàn)的詞元個數(shù)。HashSet<String>ids=newHashSet<String>();ids變量用來存儲出現(xiàn)的詞元的ids。這樣搜索的復(fù)雜度就是搜索詞的詞元個數(shù)n。獲得包含詞元的ids,構(gòu)造SortBean數(shù)組,對其排序,排序規(guī)則是出現(xiàn)詞元個數(shù)的降序排列。最后返回ids字符串,每個id用","分割。如要獲取詳細信息再使用getObjects方法即可。

為什么阿里不做搜索引擎

阿里是一直在做搜索引擎的,只不過阿里做搜索不叫阿里搜索,但是這并不代表阿里就沒有做搜索引擎,比如神馬搜索、夸克搜索(夸克瀏覽器自帶搜索引擎)、比如針對性的淘寶商品搜索,1688貨源搜索。其實阿里巴巴一直在搜索領(lǐng)域深耕,只不過由于入局時間更晚,技術(shù)和內(nèi)容積累不夠,所以阿里的搜索并沒運作達到百度一樣的知名度而已。

百度的搜索的領(lǐng)先優(yōu)勢

在搜索領(lǐng)域的入局時間上,百度是國內(nèi)最早做中文搜索產(chǎn)品之一的,并且以絕對的優(yōu)勢統(tǒng)治了PC的搜索市場十多年,谷歌退出中國之后,百度就占據(jù)了絕對的優(yōu)勢。先入為主的思想,幾乎讓百度成了搜索的代稱,"百度一下,你就知道"這句廣告詞也已經(jīng)非常的深入人心了。所以想要另一個產(chǎn)品快速的去替代是非常困難的。就像雖然有很多的挑戰(zhàn)者,但是騰訊一直占據(jù)了社交領(lǐng)域的優(yōu)勢,阿里占據(jù)了電商的優(yōu)勢。如果對于搜索沒有革命性的改變,先要撼動百度的地位也是非常的困難的。

百度擁有巨大的內(nèi)容積累。如果搜索僅僅是把用戶帶到另一個網(wǎng)站,那么這個搜索引擎就比較容易替代。而百度自身擁有大量的內(nèi)容積累,百度百科積累了大量的百科詞條,百度文庫積累了大量的文檔資源,百度圖片是最大的中文圖片庫,百度知道是最大的中文問答社區(qū)。想要成為百度的替代品,還要有強大的資源的積累。

搜索市場阿里的進擊

阿里在搜索領(lǐng)域也是一直在發(fā)展的,而且也是取得一定成績的,只不過想要能達到百度的水平還需要很長的路要走。比如神馬搜索已經(jīng)發(fā)展了很長的時間,目前也取得了不錯的市場份額。阿里的優(yōu)勢是阿里是將搜索引擎融入到自家的瀏覽器產(chǎn)品中,比如UC瀏覽器、夸克瀏覽器。而瀏覽器作為重要的上網(wǎng)入口,一旦占據(jù)了這個優(yōu)勢,那么搜索引擎自然而然的就做起來了。

這也是百度目前面臨的困境,在PC時代,百度幾乎是上網(wǎng)的入口,而移動互聯(lián)網(wǎng)時代,百度卻有些掉隊了,移動互聯(lián)網(wǎng)給百度留下來的入口約來越少,阿里開始做搜索、頭條也開始做搜索、搜狗也在后面窮追猛打,百度的日子并不好過

PC時代我們最常見的操作就是打開瀏覽器用百度搜索,而移動互聯(lián)網(wǎng)時代,我們通常更喜歡到專門的軟件去觀看搜索,比如去知乎搜索一些問題的答案,去頭條搜索一些實時新聞動態(tài),去抖音搜索短視頻,并且很多網(wǎng)站現(xiàn)在內(nèi)容也限制百度去爬取,比如微信公眾號的內(nèi)容以及頭條的內(nèi)容百度就搜索不到,而使用搜狗搜索就可以進行搜索公眾號內(nèi)容,使用頭條搜索就可以搜索到頭條的內(nèi)容。即使很多內(nèi)容被百度搜索到了,也會提示跳轉(zhuǎn)到app觀看。

被限制的滋味不好受,于是百度推出了百家號來對標頭條,推出好看視頻、全民小視頻對標西瓜視頻、抖音快手。去做自己的百度APP增強百度的流量入口。

es和solr使用場景對比

1.es和solr都是搜索引擎,但在使用場景上有所不同。2.es(Elasticsearch)適用于大規(guī)模數(shù)據(jù)的全文搜索和分析,具有高可擴展性和高性能。它可以處理大量的實時數(shù)據(jù),并支持復(fù)雜的查詢和聚合操作。因此,es常用于日志分析、實時監(jiān)控、搜索引擎等場景。solr則更適合于傳統(tǒng)的文檔檢索場景,如電子商務(wù)網(wǎng)站的商品搜索、新聞網(wǎng)站的文章搜索等。solr提供了豐富的文檔處理功能和可定制的搜索結(jié)果排名算法,同時也支持分布式部署和高可用性。3.除了上述的主要應(yīng)用場景外,es和solr還可以結(jié)合使用。例如,可以使用es進行實時數(shù)據(jù)的索引和分析,然后將結(jié)果存儲到solr中進行文檔檢索。這樣可以充分發(fā)揮兩者的優(yōu)勢,滿足不同的需求。另外,es和solr都是開源軟件,擁有活躍的社區(qū)支持和豐富的插件生態(tài)系統(tǒng),可以根據(jù)具體需求進行擴展和定制。

END,本文到此結(jié)束,如果可以幫助到大家,還望關(guān)注本站哦!

扒开粉嫩小泬舌头伸进去视频| 男女无遮挡高潮揉揉| 国产人人俗AV麻豆| 六六毛片| 亚洲欧美一区二区国产综合| 亚洲精品无码午夜福利中文| 国产精品人与拘| 精品人妻电影网| 国产精品啪| 亚洲成人传媒| 91AV、熟女| 久久韩国精品韩国专区| 亚洲自拍自| 四虎海外免费影视大全| 亚洲国产天堂99精品一区| 欧美视频一区在线观看| xxxx小日本com| 国产精品欧美一区二区| 91在线视频导航| 无码AV爽爽爽在线观看| 四川丰满少妇三级毛片| 中国麻豆黄色在线| 狠痕鲁2021国内揄拍国内精品| 精品在线播放亚洲| 国产无套码AⅤ在线观看在线播放| 另类国产欧美| 欧美xxxx做受欧美88bbw| 中文字幕第一页在线资源| a欧美v| 久久精品亚洲区| 亚洲无码在线播放A| 欧美AAAAAA午夜| 亚洲欧美日韩久久精品第一区| 国产无码高清大片| 欧美成人精品| 三级AV黄色影院| 99久久精品久久免费观看不卡| 久久久伊人欧美| JK白丝在线喷水| 天堂免费播放AV| 国产精品毛片久久久|