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接口實現