1. 程式人生 > >Solr進階之Solr綜合文字相似度的多因素權重排序實現

Solr進階之Solr綜合文字相似度的多因素權重排序實現

現在有個需求是這樣子的:
需要計算搜尋詞的權重設定其為總排序權重的0.6,其他因素的權重為0.4
其他因素中還有詳細的劃分.
這裡我們用Solr如何來實現?眾所周知solr預設的排序方式為按照文字相似度來進行降序排列的,現在我們要將打分的Score作為排序的一個因子來利用.就需要單獨的獲取到Score.
網上是有一些通過繼承類來實現的方式的.這裡我不再累述,而說一種通過Solr內建的函式來實現的方式.

solr提供了函式查詢的方式,也能用函式的計算結果來作為排序的欄位.我們用solr的函式是可以拿到查詢的score打分的,下面給出相應的證明:

原始查詢打分如圖:下面使用solr獲取可以操作的score,如圖:能看出來,我們自己得到的myscore和原始的score的大小是一致的.



下面看一個例子及其相應的打分函式的實現:



①匹配權重係數:0.6,
權重因子係數:
標題 0.6   正文0.4
②其他權重係數:0.4
評論得分:0.3
點贊數得分:0.25
最後評論時間得分:0.2
瀏覽量得分:0.15
收藏數得分:0.1


拿搜尋詞 話題 來舉例子,函式如下:

myscore:sum(product(scale(query({!v='topicName:"話題"^3  OR topicContent:話題^2'}),0,1),0.6),product(sum(product(scale(topicReplyNum,0,1),0.3),product(scale(likeCount,0,1),0.25),product(scale(collectionNum,0,1),0.1),product(scale(countPV,0,1),0.15),product(scale(lastReplyTime,0,1),0.2)),0.4))



我們用函式來排序能看出來綜合排序是有效果的,score大的不一定在前面了
由於考慮到效能問題,真正程式碼實現時可以犧牲一部分的準確性,先離線計算一下其他部分的分值,儲存起來,直接綜合文字相似度和其他權重即可.能提高一部分的查詢效率.但是資料量太大還是會存在問題(需要考慮做rerank來進行一個topN的精確排序)
離線部分索引程式碼和查詢部分的生成排序的函式如下:

查詢部分的排序欄位使用函式來實現:到此基本上綜合多因素排序部分基本上可以算完成了,下面就是根據的搜尋效果來調整演算法和引數了!

相關推薦

SolrSolr綜合文字相似因素權重排序實現

現在有個需求是這樣子的:需要計算搜尋詞的權重設定其為總排序權重的0.6,其他因素的權重為0.4其他因素中還有詳細的劃分.這裡我們用Solr如何來實現?眾所周知solr預設的排序方式為按照文字相似度來進行降序排列的,現在我們要將打分的Score作為排序的一個因子來利用.就需要單獨的獲取到Score.網上是有一些

我的Android旅------>怎樣在個LinearLayout中加入分隔線

lai tex pre draw white 方法 utf == 技術分享 假設要適合於全部的Android版本號,能夠在多個LinearLayout放置用於顯示分隔線的View。比如,放一個ImageView組件。然後將其背景設為分隔線的顏色或圖像,分隔線

毛毛Python路3——程序,程序開,守護程序,鎖!

毛毛Python進階之路3——程序,程序多開,守護程序,鎖! 話說在寫進階2 雙端互動的時候已經用到了程序多開socketserver。但那個僅僅侷限在雙端互動的時候,所以現在寫的是啥時兒都可以。妥妥的,安排,安排…… 【一個程式至少有一個程序,一個程序至少有一個執行緒!】

HadoopMR中MapTask並行決定機制及切片機制

前言 maptask的並行度決定map階段的任務處理併發度,進而影響到整個job的處理速度 那麼,mapTask並行例項是否越多越好呢?其並行度又是如何決定呢? 1 mapTask並行度的決定機制 一個job的mapTask並行度由客戶端在

我的Android旅------>Android使用百地圖時,關於android.permission.BAIDU_LOCATION_SERVICE的宣告警告。

【重要提醒】 定位SDKv3.1版本之後,以下許可權已不需要,請取消宣告,否則將由於Android 5.0多帳戶系統加強許可權管理而導致應用安裝失敗。 <uses-permission and

文字相似-bm25演算法原理及實現

原理BM25演算法,通常用來作搜尋相關性平分。一句話概況其主要思想:對Query進行語素解析,生成語素qi;然後,對於每個搜尋結果D,計算每個語素qi與D的相關性得分,最後,將qi相對於D的相關性得分進行加權求和,從而得到Query與D的相關性得分。BM25演算法的一般性公式如下:其中,Q表示Query,qi

solr四:建立檔案索引

索引資料來源並不會一定來自於資料庫、XML、JSON、CSV這類結構化資料,很多時候也來自於PDF、word、html、word、MP3等這類非結構化資料,從這類非結構化資料建立索引,solr也給我們提供了很好的支援,利用的是apache tika。 下面我們來看看在sol

【我的Android旅】如果使用.output命令將SQLite資料庫中的資料匯出為文字

一、需求描述 最近在做一個漢字筆畫排序的功能,正好整理好了一個數據庫,現在想把這個資料庫內容匯出來為文字內容。 二、匯出資料庫內容 現在準備將這個ChinessStroke.db匯出來,步驟如下 D:\>sqlite3 ChinessStroke.db

solr九:solr對數字和單個字元的搜尋

solr中配有分詞器,但分詞器裡面有大寫轉換為小寫的過濾器時,數字就會被過濾。比如123中國ABC。123就會被過濾掉了,所以才查1|12|123都會失敗。 根據賬號來搜尋,當賬號在資料庫中是整型

CSS

模式 ant 表格 weight mil 比較 標題 根據 amp 下面主要引用http://www.cnblogs.com/wangfupeng1988/tag/css知多少/ CSS進階筆記: 一、學習CSS的三個突破點 1.瀏覽器如何加載和解析CSS——CSS的5個來

Android 動畫動畫切換

ram 屏幕 pre 退出 tac 旋轉動畫 utf 轉動 XML 一、Activity切換動畫   在Android開發中,經常會遇到Activity之間切換效果,下面介紹一下,Activity左右滑動切換效果。在Android2.0以後版本,在Activity中添加了

路(基礎篇) - 011 arduino api基礎手冊

異或 change 可用 算術運算符 chan 程序結構 換算 是否 關閉 arduino 函數 api 程序結構 在Arduino中, 標準的程序入口main函數在內部被定義, 用戶只需要關心以下兩個函數:void setup()void loop()setup() 函數

路(基礎篇) - 008 SPI數據傳輸(庫函數方法)

ria att clockd == bus 屏蔽 attach serial out 主機端: 1 /********************************* 2 代碼功能:SPI數據傳輸(主機端) 3 引腳說明: 4 SS/CS:片選(高電平屏

路(基礎篇) - 009 通過底層AVR方法實現SPI數據傳輸

lean oop and return false 進階 from setup pie 主機端: /********************************* 代碼功能:通過底層AVR方法實現SPI數據傳輸(主機端) 創作時間:2016*10*17 使用資源:

路(基礎篇) - 007 脈沖寬度測量

style 函數 long 最大 void serial 作者 println 電平 1 /********************************* 2 代碼功能:Pulse脈沖寬度測量 3 使用函數: 4 pulseIn(引腳號,脈沖響應電平,

路(中級篇) - 018 基於arduino的簡易版智能衣架

檢驗 dig cloc 布線 pin on() -- mage 根據 一. 設備及要求 目的:制作一個可以自動根據事實的天氣的狀況進行對衣架上的衣服進行晾曬。 基礎裝置:可伸縮的晾衣架。 開發環境:Arduino1. 8.1 主控板:Arduino UNO 動力裝置:

項目 集群環境搭建(一)概述

問題 特點 多臺 cpu 好的 content 成了 系統資源 通過 今天我們說一個不是特別新,但近期今年伴隨大數據熱而比較火的一個技術-集群技術。 什麽是集群技術 集群(Cluster)技術是指一組相互犭蟲立的計算機,利用快速通信網絡組

【SSH路】Hibernate映射——一對一單向關聯映射(五)

技術 iyu 標識 tails for sso 3.0 sdn 例如 【SSH進階之路】Hibernate基本原理(一) ,小編介紹了Hibernate的基本原理以及它的核心,採用對象化的思維操作關系型數據庫。 【SSH進階之路】Hibernate搭建開發環境+簡單實例

【SSH路】Struts + Spring + Hibernate 開端(一)

height 一段 ioc 效率 陽光大道 面向對象的思想 text ase 們的 Long Long ago。就聽說過SSH。起初還以為是一個東東,詳細內容更是不詳,總認為高端大氣上檔次,經過學習之後才發現,不不過高大上,更是低調奢華有內涵,經過一段時間的

2017PHP程序員的

通信協議 thinkphp nmp 圖形圖像 update gin io模型 應用場景 單例 又是一年畢業季,可能會有好多畢業生即將進入開發這個圈子,踏上碼農這個不歸路。根據這些年在開發圈子總結的LNMP程序猿發展軌跡,結合個人經驗體會,總結出很多程序員對未來的迷漫,特別對