Solr的自动完成实现方式(第三部分:Suggester方式续)
在之前的兩個部分(part1、part2)中,我們學會了如何配置和查詢solr來獲取自動完成的功能。今天,我們來看一下如果為suggester添加字段,以這種方式來提供自動完成的功能。?
?
組件配置?
在上一期的配置組件中添加如下的參數:
這樣我們的配置就變成了:?
<searchComponent name="suggest" class="solr.SpellCheckComponent"><lst name="spellchecker">
<str name="name">suggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
<str name="field">name_autocomplete</str>
<str name="sourceLocation">dict.txt</str>
</lst>
</searchComponent>
使用這個參數,我們讓suggest組件使用名叫dict.txt的文件作為solr的配置字典。?
handler配置?
handler的配置也需要添加額外的一個參數:
?
完整的配置為:?
<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchComponent"><lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.count">10</str>
<str name="spellcheck.onlyMorePopular">true</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
這個參數告訴solr,當查詢的結果數多于設定的count數時,返回點擊數更多的那些。?
Dictionary?
我們告訴solr來使用這個字段,那么這個字段長的什么樣呢?下面來看一個例子:?
Hard disk hitachi
Hard disk wd 2.0
Hard disk jjdd 3.0
這個字典的結果是什么樣的呢?每個詞組放在單獨的一行中,每行以改詞組的權重為結束(權重與詞組之間以TAB字符分隔),這個權重就是跟spellcheck.onlyMorePopular=true?香港的參數,默認值為1.0。該字段必須以UTF-8的編碼格式存儲。每行前有#字符的將被忽略(注釋行)。?
數據?
以這種方式,我們不需要數據,字段就是數據。?
運行?
在重新構建suggester之后,我們來看一下它的運行情況,輸入命令:?
得到的結果為:?
<?xml version="1.0" encoding="UTF-8"?><response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
<lst name="spellcheck">
<lst name="suggestions">
<lst name="Dys">
<int name="numFound">3</int>
<int name="startOffset">0</int>
<int name="endOffset">3</int>
<arr name="suggestion">
<str>Hard disk jjdd</str>
<str>Hard disk wd</str>
<str>Hard disk hitachi</str>
</arr>
</lst>
</lst>
</lst>
</response>
?
結束語?
跟預期一樣,suggest的結果是按權重排序的。這里的大小寫敏感(注意首字母).?
你有什么建議呢?如果我們有一個很好的字典,這個字典的權重是基于用戶的查詢行為產生的,那么用戶肯定會喜歡它!如果沒有好的字典,還是不要用這種方式的好。?
下一步?
下一期,我們看一下不同方式的suggest產生的索引結構和大小。?
原文URL:http://java.dzone.com/news/solr-and-autocomplete-part-3?mz=33057-solr_lucene?
轉載于:https://www.cnblogs.com/ibook360/archive/2011/11/30/2269126.html
總結
以上是生活随笔為你收集整理的Solr的自动完成实现方式(第三部分:Suggester方式续)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TABCTL32.OCX 文件
- 下一篇: Win7 一键获得管理所有权限(最高权限