ansj分詞器和solr結合的零零碎碎

2021-09-02 03:43:23 字數 1260 閱讀 9144

[size=large]在solr4.8使用的章節裡我講了很多有關ansj分詞器的用法以及相關描述和個人看法。這裡新開一篇專門描述。

傳送門:

作者是個年輕的技術男,github上有他的微博,可以和他溝通交流問題(加粉吧,雖然微博現在不流行了,但是這麼好的分詞器的作者才800多粉絲看著心疼)。

ansj附加詞庫是比較前衛的樹形新增,按照檔案或者資料夾批量新增,這樣會帶來乙個問題,詞庫是在專案內還是另外存放,在專案內的話,打包專案後不方便找到,有時會有bug,這裡我是推薦另外存放,也方便持續新增,然後用配置檔案來指向目錄即可。開發中善用配置檔案可以明顯得提高生產力,避免將配置寫死在**裡。

如果只用一種分詞方法來實現索引和搜尋,那麼重寫tokenizer即可,但是實際使用solr過程中,索引我們通常希望最小顆粒,搜尋採用智慧型分詞,所以就需要傳入引數進行配置選擇特定的分詞器,因此需要重寫tokenize***ctory,傳入引數。我的schema.xml配置如下

考慮到ansj自己並沒有停用詞庫,後續應該會新增lucene自己的停用詞庫。重寫tokenizer時需要注意termatt和offsetatt設定不要出錯,因為ansj的term沒有末位位置,所以需要自己處理:

termatt.copybuffer(term.getname().tochararray(),0,term.getname().length());

offsetatt.setoffset(term.getoffe(),term.getoffe()+term.getname().length());

前段時間ansj結合solr4.8後一直在做solrcloud,後來直接拿來用,發來ansj有不少問題和不足。乙個很大的bug是它索引排序有問題,導致usefastvectorhighlighter時候會報錯,無法使用。這個乙個不小的問題。我折騰很久,甚至差點放棄了ansj,最後總算發現是ansj的indexanalysis有不夠周全的地方。畢竟ansj的分詞重點是智慧型分詞和發現新詞,傳統分詞不被作者重視也在情理之中。下面說下問題具體所在。

比如我們要對「創業者創業」進行分詞,傳統的ikanalyzer之類的分詞,分出來是「創業者 創業 業者 創業」,ansj分詞是「創業者 創業 創 創業 業 者」。先不說創業者被過分細碎分詞(ansj實在太簡單粗暴了),這個分出來的詞排序明顯不對,position位置錯誤,usefastvectorhighlighter高亮會儲存錯誤的向量位址。所以需要在indexanalysis裡矯正分詞的排序。

然後是最細分詞的問題,抽時間我會進行二次開發,提高準確度,降低冗餘。

未完待續....

[/size]

Solr整合Ansj中文分詞器

參考 配置和solr和tomcat的 ansj資料 2 複製ansj相關檔案到solr專案中 1 將ansj seg 2.0.8.jar nlp lang 0.2.jar和solr analyzer ansj 5.1.0.jar放到solr專案中 2 將library.properties liba...

solr分詞器安裝

4.在每個核心的schema.xml中配置ik分詞器 其中ismaxwordlength是指分詞的細粒度,可以分別制定index索引和query查詢的分詞細粒度,建議將index的ismaxwordlength設定為false,這樣就採用最細分詞,是索引更精確,查詢時盡量能匹配,而將query的is...

solr配置中文分詞器

可能需要連線上篇 solr與tomcat整合 將data裡的.dic檔案拷貝到dic目錄 3.修改schema.xml檔案,增加下面 注意你需要修改的是dicpath引數 fieldtype name textcomplex class solr.textfield analyzer tokeniz...