solr6的學習與使用(五) 聯想詞功能

2021-08-04 04:43:56 字數 1894 閱讀 5282

說到搜尋,聯想詞功能肯定是必備的。為實現基於solr的聯想詞功能,做了大量的調研,最終在專案中實現了兩種方案混用的形式。第一種是基於分詞器推薦功能,即spellcheck;第二種是利用自己生成詞庫的方式去實現聯想。那說一下這兩種在solr裡的實現方式吧。

在solrconfig.xml中修改如下配置,然後重啟solr。

text_ik

default

searchtext

true

spellchecker

text_ik

suggest

org.apache.solr.spelling.suggest.suggester

org.apache.solr.spelling.suggest.tst.tstlookup

searchtext

0.0001

spellchecker

freq

true

true

true

suggest

true

false

10true

5 suggest

需要說明的是,上面配置中主要注意field欄位和queryanalyzerfieldtype欄位的配置,前者是你再manage-scheme中配置過的field,後者是fieldtype。下面是乙個請求後的示例,訪問url為:http://[solr-sever-ip]:8983/solr/[corename]/suggest?indent=on&q=防火設計&wt=json。

,

"spellcheck":,

"設計",],

"collations":[

"collation","防火設計規範",

"collation","防火門設計",

"collation","防火牆設計",

"collation","防火設計標準",

"collation","防火門設計規範"]}}

而我在聯想詞的選擇中選擇的不是suggestion(因為會對分詞結果產生多個),最終我採用了collations(通過配置maxcollations設定想要的結果數)。然而這種效果不是非常理想,缺點就是當推薦的分詞越來越長時,會產生語句不通的推薦。我的做法是通過一些策略過濾那種情況,然而為了更好的聯想體驗,我又實現了第二種方式的聯想功能。

2. 基於自建聯想詞庫方式。

首先建立乙個新的core,方式參考之前的文章。然後

修改配置檔案solrconfig.xml,與上面基本一致,需要注意到sourcelocation為自建詞庫的位址,每次更改自建詞庫需要重啟solr才能生效。

text_ik

suggest

org.apache.solr.spelling.suggest.suggester

org.apache.solr.spelling.suggest.tst.tstlookup

searchtext

0.0001

suggest/suggest.txt

spellchecker

freq

true

true

true

suggest

5true

false

true

5 suggest

這種方式也有弊端,如果你的自建詞庫不夠全的話,會產生無推薦的情況。因此我最終將這兩種方式同時運用,如果有比較好的方案,希望各位能夠指點一下!多謝!

solr6使用ansj做中文分詞

solr中有自帶的中文分詞,不過它將中文按乙個乙個字進行分詞,這就導致搜尋出的結果讓人不滿 這裡以text general欄位為例,managed schema中的配置是這樣寫的 生成索引和查詢使用的都是solr.standardtokenize ctory 官方文件有詳細介紹 您配置的文字欄位中鍵...

ES6學習筆記(五) 函式與物件

function log x,y world log hello hello world log hello china hello china log hello hellofunction foo foo undefined,5 foo 1,5 foo 1,2 foo typeerror can...

tomcat與solr3 6的整合使用 原創

最近在做搜尋引擎的乙個專案,現在把solr3.6與tomcat的整合的主要步驟簡單的記錄如下 3.開啟d lucene solr home資料夾中的conf d lucene solr home config 下的solrconfig.xml,配置 為 這裡指定data的路徑 5.為context設...