新四季網

一種基於Lucene的支持表達式的自定義相關度排序算法的製作方法

2023-06-24 21:39:51 1


本發明屬於計算機技術領域,具體是一種基於lucene的支持表達式的自定義相關度排序算法。



背景技術:

目前,從海量信息中獲取有用信息的關鍵技術是信息檢索,信息檢索的核心問題就是預測文檔的相關度,並按照相關度對各文檔進行排序。一般而言,排在最頂端的文檔被認為最相關;因此,相關度的計算和排序算法就成為信息檢索的核心。

典型的檢索系統的排序技術主要有詞頻統計和詞位置加權排序算法、基於用戶反饋的directhit算法、pagerank超連結分析排序算法和hits排序算法。這些典型的相關度排序算法主要基於全文本分詞或其在網絡中的關注程度來對文檔進行排序,適用於普遍的全文本搜索,不能滿足用戶特定的需求。

隨著數據的爆炸式增長,大數據系統往往根據數據本身的特徵,分為不同的欄位進行存儲,所以在文檔檢索排序時,單單使用全文本相關度排序已不能得到用戶想要的結果,必須考慮更多的因素(即欄位)進行排序,並應該為用戶提供更為多樣靈活的相關度排序算法。



技術實現要素:

本發明為了解決現有傳統大數據系統欄位間運算支持的函數種類缺乏多樣性,欄位間運算和自定義排序缺乏靈活性的問題,提供了一種基於lucene的支持表達式的自定義相關度排序算法。

具體步驟如下:

步驟一、搭建算法運行所需的分布式環境,包括若干數據節點,一個管理節點和一個元數據節點;

數據節點存儲各欄位的數據,底層採用lucene索引作為存儲引擎;管理節點對數據存儲和查詢過程中的任務進行管理;元數據節點存儲各數據節點的數據分布情況和各欄位的類型等信息。

步驟二、對用戶發送的某個文檔或者文章,將內容劃分為不同欄位,並構造表達式作為相關度排序請求;

用戶將文檔或者文章中的不同內容存儲到不同的欄位中,在進行全文檢索時,不同的欄位作為不同的參數,構造不同內容的表達式作為相關度排序請求;每個文檔的相關度排序請求為一個或者多個。

步驟三、針對某個相關度排序請求,管理節點進行解析後同時發送給不同數據節點,每個數據節點分別獲取該請求的欄位信息;

欄位信息包括該欄位的數據類型和欄位名;文本類型的欄位還包括該欄位存儲時所採用分詞器。

管理節點解析該相關度排序請求,具體為:判斷表達式是否合法,如果合法,將表達式和作為參數的欄位名發送到各數據節點;否則,提示錯誤,結束。

表達式包括運算符表達式和函數表達式,針對運算符表達式,首先,判斷運算符中操作數的個數是否合法,然後,將非數學數字的操作數作為未知參數,進行預運算,如果預運算通過,則該運算符表達式合法;

針對函數表達式,根據函數對照表,匹配函數表達式的函數名跟對照表中的函數名是否一致,且該函數表達式的所有欄位名參數與元數據節點中的元數據表中的欄位名稱一一對比,如果全部對應,則該函數表達式合法。

步驟四、每個數據節點根據欄位信息的不同欄位名參數,在各自的數據節點中查詢對應的不同欄位數據;

步驟五、每個數據節點把各自的欄位數據分別帶入表達式,並調用函數對照表中對應的函數進行計算,將計算結果放入每個數據節點對應的堆中;

步驟六、對各堆中的相關度進行排序並調整,選擇最終排序結果。

具體為:

步驟601、針對某個相關度排序請求對應的各個堆,從每個堆中選出各自的最大值;

步驟602、將所有最大值合併,再選擇出其中的最大值作為最終結果;

步驟603、將最終結果從對應的堆中刪除,並在該堆中重新選擇最大值,與其餘堆的最大值進行合併;

步驟604、重複步驟602,直至得到符合用戶要求的最終結果。

步驟七、將最終自定義表達式的排序結果返回給用戶。

本發明的有益效果在於:

本發明提供了一種靈活的自定義相關度排序算法,支持多欄位間進行表達式計算,並按照其進行排序,優於單純的文檔打分排序機制,而且該發明支持更多的函數計算,且該算法適用於分布式的大數據平臺上。

附圖說明

圖1為本發明一種基於lucene的支持表達式的自定義相關度排序算法的示意圖;

圖2為本發明元數據結構的示意圖;

圖3為本發明管理節點進行表達式解析的程序流程圖;

圖4為本發明一種基於lucene的支持表達式的自定義相關度排序算法流程圖。

具體實施例

下面結合附圖對本發明的具體實施方法進行詳細說明。

本發明一種基於lucene的支持表達式的自定義相關度排序算法,包括四部分:解析表達式,計算表達式,排序相關度和整合結果;對應採用四個模塊:表達式解析模塊,表達式計算模塊,相關度排序模塊和結果整合模塊;

如圖1所示,首先,用戶輸入自定義表達式後,表達式解析模塊對用戶輸入的表達式進行合法性檢查,並轉化為系統可以計算的形式;

具體是:用戶輸入的表達式被管理節點進行解析,解析完成後,管理節點將表達式和表達式中參數(欄位名)發送給各個數據節點;

然後,各數據節點根據欄位名在底層的lucene索引中提取欄位所對應的數據,並將欄位數據帶入表達式,應用表達式計算模塊進行計算;

進而,相關度排序模塊對各數據節點中表達式的計算結果進行排序;

具體為:將計算結果放入堆,各數據節點在各自的堆中放入一個計算結果,對堆進行一次調整;

最後,結果整合模塊對各數據節點的堆頂元素進行比較,將最優結果從堆中取出,並對取出元素的堆進行調整;

由於本算法是基於分布式系統上的lucene索引進行計算的,所以需對各節點返回的計算結果進行整合,結果整合模塊就是對各個節點的自定義表達式排序結果整合為用戶需要的結果集進行返回。

如圖4所示,所述算法具體步驟如下:

步驟一、搭建算法運行所需的分布式環境,包括若干數據節點,一個管理節點和一個元數據節點;

數據節點存儲各欄位的數據,底層採用lucene索引作為存儲引擎;管理節點對數據存儲和查詢過程中的任務進行管理;元數據節點存儲集群的數據分布情況和各欄位的類型等信息。

在該實施實例中使用三臺實體機分別作為master、datanode1、datanode2,以hadoop作為底層存儲架構,利用zookeeper進行節點管理,在master節點上使用mysql存儲數據系統的元數據。

如圖2所示,設計數據的表結構,並將表結構相關數據存放到master節點的mysql元數據系統中;在數據系統通過基於lucene的數據錄入系統,向三個節點中錄入數據。

步驟二、針對用戶發送的某個文檔或者文章,將內容劃分為不同欄位,設計為表達式形式的相關度排序請求;

每個文檔的相關度排序請求為一個或者多個;

用戶將數據信息中的不同內容存儲到不同的欄位中,例如一篇博客可以分為:博客內容、評論數、評論內容、點讚數等,將這些信息存儲為不同欄位的數據信息,用戶在進行全文檢索時可以將這些欄位作為表達式中的參數,來影響最終的相關度排序結果。例如用博客的評論數和點讚數來影響最終的相關度排序結果,那麼在進行全文搜索時,就可以構造一個評論數和點讚數作為參數的表達式。

步驟三、針對某個相關度排序請求,管理節點進行解析後同時發送給不同數據節點,每個數據節點分別獲取該請求的欄位信息;

管理節點解析表達式:判斷表達式是否合法,如果合法,將表達式和作為參數的欄位名發送到各數據節點;否則,提示錯誤,結束。

用戶輸入表達式(例如:log10(field1)*sqrt(field2))進行檢測,然後形成系統可計算的表達式,並將參數和表達式傳送給各數據節點;

表達式包括運算符表達式和函數表達式;

針對運算符表達式,首先,判斷運算符中操作數的個數是否合法,然後,將非數學數字的操作數(如函數名、欄位名)作為未知參數,進行預運算,如果預運算通過則該運算符表達式合法;

針對函數表達式,根據函數對照表,匹配函數表達式的函數名跟對照表中的函數名是否一致,且該函數表達式的所有欄位名參數與元數據節點中的元數據表中的欄位名稱一一對比,如果全部對應,則該函數表達式合法。

管理節點進行表達式解析的程序流程如圖3所示,在表達式解析模塊中預設了函數對照表;對照函數映射表,檢測用戶輸入的表達式中的函數,並進行預編譯,然後提取數據系統中欄位名,檢查表達式中的參數是否為數據系統中欄位的欄位名。

針對元數據中的讀入欄位信息,進行函數檢查,檢查函數合法性;如果是函數,判斷參數是否合法,如果合法取出函數中參數體,再次進行函數檢查;不合法則拋出異常,結束。如果不是函數,判斷是否為常量或者操作符,如果是,再次判斷是否合法,直至結束。如果不是常量或者操作符,判斷是否為欄位名,如果是,則判斷是否合法,直至結束;否則,拋出異常結束。

本算法支持的運算類型及函數如下表所示:

欄位信息包括該欄位的數據類型、欄位名,文本類型的欄位還包括該欄位存儲時所採用分詞器。

如圖2所示,欄位數據的元數據結構,包括了欄位名、欄位類型,名稱為_score的欄位為預留的默認全文打分欄位,即lucene中默認的全文相關度打分欄位。

步驟四、每個數據節點分別根據欄位信息的不同欄位名參數,在各自的數據節點中查詢對應的不同欄位數據;

步驟五、每個數據節點把各自的欄位數據帶入各自的表達式,並調用函數對照表中對應的函數進行計算,並將計算結果放入每個數據節點對應的堆中;

表達式計算模塊根據表達式中的參數,在lucene索引中提取出參數相應欄位的值進行計算。由於本算法的設計目的是應用於分布式大數據系統中,在表達式分析模塊分析完後,將表達式及其參數傳送到每一個數據節點,在每一個節點中提取表達式參數相應欄位數據,並進行表達式計算,將計算結果放入堆中並調整。

步驟六、對各堆中的相關度進行排序並調整,選擇最終排序結果。

具體為:

步驟601、針對某個相關度排序請求對應的各個堆,從每個堆中選出各自的最大值;

步驟602、將所有最大值合併後,再次選擇出其中的最大值作為最終結果;

步驟603、將最終結果從對應的堆中刪除,並在該堆中重新選擇最大值,與其餘堆的最大值進行合併;

步驟604、重複步驟602,直至得到符合用戶要求的最終結果。

將各節點的計算結果進行整合,在各節點的結果堆中取出數據,對堆進行調整,將三個結點取出的數據進行比較,符合條件的從該結點中取出並調整結點的堆,符合條件的值放入最終結果的堆並調整。

步驟七、結果整合模塊將最終排序結果返回給用戶。

實施方式是基於本發明整體構思下的實現方式,而且本發明的保護範圍並不局限於此,任何熟悉本技術領域的技術人員在本發明揭露的技術範圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護範圍之內。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀