我們的搜索功能和界面是在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è)置如圖:
高級(jí)搜索
由于時(shí)間有限告匠,我們的高級(jí)搜索功能暫時(shí)是在關(guān)鍵詞搜索的基礎(chǔ)上,以樂(lè)器種類作為過(guò)濾器离唬,為用戶篩選出更明確的結(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模闲。通過(guò)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>
拼寫(xiě)檢查、自動(dòng)糾錯(cuò)
設(shè)計(jì)拼寫(xiě)檢查和糾錯(cuò)機(jī)制畔规,在用戶出現(xiàn)拼寫(xiě)錯(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í)在輸入框下方顯示出來(lái)畴蒲,節(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è)置完后沒(méi)有效果软驰,可以用瀏覽器開(kāi)發(fā)者工具查看是否有這個(gè)jquery-1.7.2.min.js這個(gè)資源涧窒,若沒(méi)有,檢查一下路徑锭亏。
相似匹配
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)過(guò)計(jì)算按順序返回糖儡。
- mlt.fl:用于創(chuàng)建 MLT 查詢的字段。
-
mlt.count:可選怔匣。每一個(gè)結(jié)果要檢索的相似文檔數(shù)握联。