搜索功能設(shè)計(jì)

我們的搜索功能和界面是在solr自帶示例基礎(chǔ)上修改完成的,在此基礎(chǔ)上,我們基本擁有示例所有功能并美化了界面衍锚。目前我們所完成的搜索功能有: (除特意指出的,其他都在solrconfig.xml中設(shè)置)

  • 關(guān)鍵詞搜索
  • 高級(jí)搜索
  • 分組統(tǒng)計(jì)
  • 分頁(yè)顯示
  • 搜索結(jié)果高亮
  • 拼寫(xiě)檢查嗤堰、自動(dòng)糾錯(cuò)
  • 搜索建議戴质、自動(dòng)補(bǔ)全
  • 相似匹配

關(guān)鍵詞搜索

關(guān)鍵詞搜索就是在搜索框中輸入查詢?cè)~,搜索結(jié)果按要求順序顯示踢匣。排序規(guī)則權(quán)重設(shè)置如圖:

權(quán)重.PNG

高級(jí)搜索

由于時(shí)間有限告匠,我們的高級(jí)搜索功能暫時(shí)是在關(guān)鍵詞搜索的基礎(chǔ)上,以樂(lè)器種類作為過(guò)濾器离唬,為用戶篩選出更明確的結(jié)果后专。

高級(jí)搜索.PNG

分組統(tǒng)計(jì)

我們實(shí)現(xiàn)分組統(tǒng)計(jì)的方法是使用了Solr的Facet組件, Facet組件是Solr默認(rèn)集成的一個(gè)組件,可以給用戶提供更友好的搜索體驗(yàn)输莺,在搜索關(guān)鍵字的同時(shí),能夠按照Facet的字段進(jìn)行分組并統(tǒng)計(jì)戚哎。

分類.PNG
  • Facet設(shè)置
  • facet=on:?jiǎn)⒂胒acet組件
  • facet.missing :默認(rèn)為””,如果設(shè)置為true或者on,那么將統(tǒng)計(jì)那些該Facet字段值為null的記錄。
  • facet.field:設(shè)置需要進(jìn)行facet查詢的字段
  • facet.query:利用類似于filter query的語(yǔ)法提供了更為靈活的Facet模闲。通過(guò)facet.query參數(shù),可以對(duì)任意字段進(jìn)行篩選惫霸。
  • facet.mincount:限制了Facet字段值的最小count葫督,默認(rèn)為0。合理設(shè)置該參數(shù)可以將用戶的關(guān)注點(diǎn)集中在少數(shù)比較熱門的領(lǐng)域。
分組.PNG

分頁(yè)顯示

對(duì)搜索結(jié)果分頁(yè)顯示囊拜,保證每次查詢都只需返回整個(gè)搜索結(jié)果中的一個(gè)很小的集合倔监,從而提高系統(tǒng)的響應(yīng)速度。

分頁(yè).PNG

由于搜索結(jié)果中圖片較多且尺寸不同,我們采用小圖顯示粒梦,鼠標(biāo)懸浮顯示大圖,簡(jiǎn)化界面荸实,便于瀏覽匀们。

大圖.png

搜索結(jié)果高亮

在結(jié)果顯示時(shí),對(duì)用戶輸入的檢索詞粗體加黑高亮顯示准给,輔助用戶進(jìn)行瀏覽查詢與結(jié)果篩選泄朴。

  • 輸入檢索詞“民歌”,效果如圖
高亮.png
  • 設(shè)置
  • hl=on:?jiǎn)⒂媒M件
  • hl.fl :想要高亮處理的字段
  • hl.simple.pre和hl.simple.post:設(shè)置前后標(biāo)簽露氮,不用兩個(gè)參數(shù)的話祖灰,默認(rèn)的是在高亮內(nèi)容兩邊加<em></em>
    高亮設(shè)置.png

拼寫(xiě)檢查、自動(dòng)糾錯(cuò)

設(shè)計(jì)拼寫(xiě)檢查和糾錯(cuò)機(jī)制畔规,在用戶出現(xiàn)拼寫(xiě)錯(cuò)誤時(shí)自動(dòng)根據(jù)該詞語(yǔ)在索引中是否存在而做出相應(yīng)處理局扶,若錯(cuò)誤則返回錯(cuò)誤提醒,并提示正確搜索詞叁扫。

  • 效果
拼寫(xiě)檢查.png
  • /browserequestHandler中啟用spellcheck
spell.png
  • 設(shè)置spellchecksearchComponent
    <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    <str name="queryAnalyzerFieldType">string</str>
    <lst name="spellchecker">
    <str name="name">default</str>
    <str name="field">title</str>
    <str name="classname">solr.DirectSolrSpellChecker</str>
    <str name="distanceMeasure">internal</str>
    <float name="accuracy">0.5</float>
    <int name="maxEdits">2</int>
    <int name="minPrefix">1</int>
    <int name="maxInspections">5</int>
    <int name="minQueryLength">2</int>
    <float name="maxQueryFrequency">0.0000001</float>
    </lst>
    </searchComponent>

  • 設(shè)置/spellrequestHandler
    <requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">

    <str name="spellcheck.dictionary">default</str>
    <str name="spellcheck">on</str>
    <str name="spellcheck.extendedResults">true</str>
    <str name="spellcheck.count">10</str>
    <str name="spellcheck.alternativeTermCount">5</str>
    <str name="spellcheck.maxResultsForSuggest">5</str>
    <str name="spellcheck.collate">true</str>
    <str name="spellcheck.collateExtendedResults">true</str>
    <str name="spellcheck.maxCollationTries">10</str>
    <str name="spellcheck.maxCollations">5</str>
    </lst>
    <arr name="last-components">
    <str>spellcheck</str>
    </arr>
    </requestHandler>

搜索建議三妈、自動(dòng)補(bǔ)全

根據(jù)用戶輸入,從系統(tǒng)索引文件中的文檔內(nèi)容匹配出相應(yīng)的terms莫绣,并實(shí)時(shí)在輸入框下方顯示出來(lái)畴蒲,節(jié)省用戶檢索時(shí)間,降低用戶輸入錯(cuò)誤查詢?cè)~的幾率兔综。

  • 效果顯示
建議.png
  • 設(shè)置suggestsearchComponent
    <searchComponent name="suggest" class="solr.SuggestComponent">
    <lst name="suggester">
    <str name="name">mySuggester</str>
    <str name="field">title</str>
    <str name="lookupImpl">FuzzyLookupFactory</str>
    <str name="dictionaryImpl">FileDictionaryFactory</str>
    <str name="suggestAnalyzerFieldType">textComplex</str>
    <str name="buildOnStartup">false</str>
    </lst>
    </searchComponent>
  • 設(shè)置/suggestrequestHandler
    <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy" >
    <lst name="defaults">
    <str name="suggest.dictionary">mySuggester</str>
    <str name="suggest">true</str>
    <str name="suggest.count">10</str>
    </lst>
    <arr name="components">
    <str>suggest</str>
    </arr>
    </requestHandler>
  • 修改suggest.vmhead.vm中的參數(shù)饿凛,改為自己設(shè)置的field name
suggest.png
head.png
  • head.vm中我們可以看到引用了jquery autocomplete.js和對(duì)應(yīng)的庫(kù)。如果設(shè)置完后沒(méi)有效果软驰,可以用瀏覽器開(kāi)發(fā)者工具查看是否有這個(gè)jquery-1.7.2.min.js這個(gè)資源涧窒,若沒(méi)有,檢查一下路徑锭亏。
autocomplete.png

相似匹配

Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 實(shí)現(xiàn)了一樣的功能纠吴。MLT 是與標(biāo)準(zhǔn) SolrRequestHandler 集成在一起的;MoreLikeThisHandler 與 MLT 結(jié)合在一起慧瘤,并添加了一些其他選項(xiàng)戴已,但它要求發(fā)布一個(gè)單一的請(qǐng)求。

  • 效果顯示
MLT.PNG
  • solrconfig.xml中設(shè)置
  • mlt.qf:權(quán)重設(shè)置锅减,結(jié)果經(jīng)過(guò)計(jì)算按順序返回糖儡。
  • mlt.fl:用于創(chuàng)建 MLT 查詢的字段。
  • mlt.count:可選怔匣。每一個(gè)結(jié)果要檢索的相似文檔數(shù)握联。


    mlt設(shè)置.PNG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子金闽,更是在濱河造成了極大的恐慌纯露,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件代芜,死亡現(xiàn)場(chǎng)離奇詭異埠褪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)挤庇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門钞速,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嫡秕,你說(shuō)我怎么就攤上這事玉工。” “怎么了淘菩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)屠升。 經(jīng)常有香客問(wèn)我潮改,道長(zhǎng),這世上最難降的妖魔是什么腹暖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任汇在,我火速辦了婚禮,結(jié)果婚禮上脏答,老公的妹妹穿的比我還像新娘糕殉。我一直安慰自己,他們只是感情好殖告,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布阿蝶。 她就那樣靜靜地躺著,像睡著了一般黄绩。 火紅的嫁衣襯著肌膚如雪羡洁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天爽丹,我揣著相機(jī)與錄音筑煮,去河邊找鬼。 笑死粤蝎,一個(gè)胖子當(dāng)著我的面吹牛真仲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播初澎,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秸应,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起灸眼,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卧檐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后焰宣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體霉囚,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年匕积,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盈罐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闪唆,死狀恐怖盅粪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悄蕾,我是刑警寧澤票顾,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站帆调,受9級(jí)特大地震影響奠骄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜番刊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一含鳞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芹务,春花似錦蝉绷、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至沃但,卻和暖如春磁滚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宵晚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工垂攘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淤刃。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓晒他,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逸贾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陨仅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容