solr6.3根據搜索關鍵詞詞頻(關鍵詞出現次數、關鍵詞highlight)進行排序

http://localhost:8080/solr/test/select?fq=product_name:大有&indent=on&q=product_name:大有電鑽 OR raws_title:大有電鑽&rows=45&wt=json

使用q進行分別進行兩個字段查詢,得出的結果有不少,包括很其餘品牌的商品:博世、喜利得、林君等各種品牌的「電鑽」。若是須要進行精準的品牌查詢,那就須要創建一個品牌詞詞庫,也是經過slor進行code添加一套,而後在solrj進行編寫邏輯,把拆詞的內容到品牌詞庫再搜索一次,若是包含則說明用戶輸入了指定的品牌商品。【有空補上代碼】java

而後把得出來的品牌詞,經過fq進行過濾篩選,得出的內容將會是該商品的全部相關品牌。json

目前的狀況是:有一些商品的排序太靠後面了,需求是:可否根據「電鑽」的出現次數進行排序靠前處理。api

整個國內對於solr的支持太少了,動不動就收費,收費給出來的結論也是大忽悠,看好了,要開始車了。函數

首先咱們要掌握「termfreq」函數,這個是solr已實現的方法,使用如:termfreq(raws_title,*電鑽*)spa

termfreq("字段","詞頻搜索的關鍵詞"),得出的結果是:code

根據這個,咱們能夠把這個函數放到sort進行排序。在sort中填寫:termfreq(raws_title,*電鑽*) desc排序

如圖,這樣就實現了solr根據搜索關鍵詞的詞頻或出現次數進行排序了。接口

【注意】咱們能夠根據這個原理進行復雜的得分計算,例如product_name出現「電鑽」得分會更高,能夠結合Solr的函數查詢(FunctionQuery)進行實現。it

例如:io

product,product(x,y,...)將會返回多個函數的乘積。

格式:product(2,2)

輸出結果:4

 

sum,這個函數的意思就顯而易見啦,它就是表示「和」。

格式:sum(4,1)

輸出結果:5

 

咱們能夠根據該函數實現自定義的評分:

sum(product(termfreq(product_name,*電鑽*),20),termfreq(raws_title,*電鑽*)) desc

結果完滿展示:

 

題外話,在搜索過程當中,須要更多的精準匹配,能夠一樣從「同義詞」入手,等我研究出成果,再和你們一塊兒分享。

對於solrj整合這個關鍵詞詞頻排序,也是很是簡單的,大家會java的應該會了吧,其實就是調用solr自身的api接口實現

相關文章
相關標籤/搜索