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

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

  • 關(guān)鍵詞搜索
  • 高級(jí)搜索
  • 分組統(tǒng)計(jì)
  • 分頁(yè)顯示
  • 搜索結(jié)果高亮
  • 拼寫檢查、自動(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ǔ)上,以樂器種類作為過濾器,為用戶篩選出更明確的結(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。通過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

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

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

  • 效果
拼寫檢查.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í)在輸入框下方顯示出來,節(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è)置完后沒有效果,可以用瀏覽器開發(fā)者工具查看是否有這個(gè)jquery-1.7.2.min.js這個(gè)資源,若沒有,檢查一下路徑。
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)過計(jì)算按順序返回。
  • mlt.fl:用于創(chuàng)建 MLT 查詢的字段。
  • mlt.count:可選。每一個(gè)結(jié)果要檢索的相似文檔數(shù)。


    mlt設(shè)置.PNG
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容