我們的搜索功能和界面是在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è)置如圖:
高級(jí)搜索
由于時(shí)間有限,我們的高級(jí)搜索功能暫時(shí)是在關(guān)鍵詞搜索的基礎(chǔ)上,以樂器種類作為過濾器,為用戶篩選出更明確的結(jié)果。
分組統(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ì)。
- 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)域。
分頁(yè)顯示
對(duì)搜索結(jié)果分頁(yè)顯示,保證每次查詢都只需返回整個(gè)搜索結(jié)果中的一個(gè)很小的集合,從而提高系統(tǒng)的響應(yīng)速度。
由于搜索結(jié)果中圖片較多且尺寸不同,我們采用小圖顯示,鼠標(biāo)懸浮顯示大圖,簡(jiǎn)化界面,便于瀏覽。

搜索結(jié)果高亮
在結(jié)果顯示時(shí),對(duì)用戶輸入的檢索詞粗體加黑高亮顯示,輔助用戶進(jìn)行瀏覽查詢與結(jié)果篩選。
- 輸入檢索詞“民歌”,效果如圖

- 設(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ò)誤提醒,并提示正確搜索詞。
- 效果

- 在
/browse的requestHandler中啟用spellcheck

設(shè)置
spellcheck的searchComponent
<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è)置
/spell的requestHandler
<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è)~的幾率。
- 效果顯示

- 設(shè)置
suggest的searchComponent
<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è)置
/suggest的requestHandler
<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.vm和head.vm中的參數(shù),改為自己設(shè)置的field name


- 在
head.vm中我們可以看到引用了jquery autocomplete.js和對(duì)應(yīng)的庫(kù)。如果設(shè)置完后沒有效果,可以用瀏覽器開發(fā)者工具查看是否有這個(gè)jquery-1.7.2.min.js這個(gè)資源,若沒有,檢查一下路徑。

相似匹配
Solr 使用 MoreLikeThisComponent(MLT)和 MoreLikeThisHandler 實(shí)現(xiàn)了一樣的功能。MLT 是與標(biāo)準(zhǔn) SolrRequestHandler 集成在一起的;MoreLikeThisHandler 與 MLT 結(jié)合在一起,并添加了一些其他選項(xiàng),但它要求發(fā)布一個(gè)單一的請(qǐng)求。
- 效果顯示
- 在
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
