專(zhuān)利名稱(chēng):一種搜索方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)業(yè)務(wù)技術(shù)領(lǐng)域,尤其涉及一種搜索方法和裝置。
背景技術(shù):
現(xiàn)有的搜索引擎一般都是單方面基于文本相似度進(jìn)行排序,索引的存儲(chǔ)一般是基于鍵值對(duì)〈KEY,DocList>的形式。其中,KEY表示關(guān)鍵字,DocList表示包含關(guān)鍵字KEY的文檔列表。DocList中的每個(gè)元素是一個(gè)文檔對(duì)象,用于存放一個(gè)文檔的基本信息,例如:該文檔的ID、該關(guān)鍵字KEY在該文檔中出現(xiàn)的次數(shù)以及出現(xiàn)的位置等信息。當(dāng)用戶(hù)輸入一個(gè)關(guān)鍵字之后,將先根據(jù)該關(guān)鍵字進(jìn)行檢索;當(dāng)檢索到相對(duì)應(yīng)的關(guān)鍵字后,再整體計(jì)算與該關(guān)鍵字相對(duì)應(yīng)的DocList中所有文檔在此關(guān)鍵字下的得分;然后,依據(jù)上述得分對(duì)所有的搜索結(jié)果整體進(jìn)行排序,再在排序后的搜索結(jié)果中讀取用戶(hù)所需條數(shù)的搜索結(jié)果,將讀取的搜索結(jié)果返回給用戶(hù)。例如,現(xiàn)有技術(shù)中存在一種綜合搜索結(jié)果的排序方法,在該方法中,將采用排序算法計(jì)算垂直搜索引擎的綜合值,并根據(jù)綜合直對(duì)該垂直搜索引擎進(jìn)行排序,匯總所有垂直搜索引擎排序結(jié)果,生成最終的搜索結(jié)果。但是,上述排序方法是將搜索結(jié)果得分的計(jì)算過(guò)程放在搜索過(guò)程中進(jìn)行,且每次都是進(jìn)行全量排序,從而對(duì)CPU和內(nèi)存資源的占用量較大,搜索復(fù)雜度較高,搜索速度較慢,且沒(méi)有考慮信息的附加價(jià)值屬性,因而無(wú)法保證價(jià)值高的信息排序一定靠前。同時(shí),由于該方法中需要存儲(chǔ)得分計(jì)算依據(jù)的因子以及綜合得分計(jì)算因子,從而對(duì)存儲(chǔ)空間也有較高的要求。此外,現(xiàn)有技術(shù)中還存在一種基于搜索引擎的搜索結(jié)果排序方法。在該方法中,主要是根據(jù)事先配置的網(wǎng)絡(luò)資源權(quán)重,同時(shí)根據(jù)用戶(hù)輸入的關(guān)鍵字在資源中的文本權(quán)重,綜合計(jì)算每條相關(guān)資源得分,然后進(jìn)行全量排序,以生成搜索結(jié)果。但是,在該方法中,雖然考慮到信息的附加價(jià)值屬性,但是在搜索過(guò)程中需要計(jì)算各文檔得分,同時(shí)還需要對(duì)搜索的結(jié)果進(jìn)行全量排序,從而對(duì)CPU和內(nèi)存資源的占用量也較大,搜索復(fù)雜度也較高,搜索速度也較慢。同時(shí),由于該方法中也需要存儲(chǔ)得分計(jì)算依據(jù)的因子以及綜合得分計(jì)算因子,從而對(duì)存儲(chǔ)空間也有較高的要求綜上可知,在現(xiàn)有技術(shù)中的搜索方法中,由于文檔得分的計(jì)算和排序都是放在搜索過(guò)程中完成,且是針對(duì)全量進(jìn)行排序;而且,索引組織的結(jié)構(gòu)也沒(méi)有考慮用戶(hù)的搜索習(xí)慣,造成存儲(chǔ)的信息量較大;另外,每次搜索均需針對(duì)全量進(jìn)行,從而大大增加了內(nèi)存和CPU等系統(tǒng)稀缺資源的負(fù)擔(dān)。同時(shí),現(xiàn)有技術(shù)中的搜索方法的搜索復(fù)雜度一般都較高,搜索響應(yīng)速度也較慢。此外,現(xiàn)有技術(shù)中的搜索方法中進(jìn)行排序的依據(jù)是文本相關(guān)度,而并未考慮能表達(dá)信息價(jià)值的關(guān)鍵屬性,因此導(dǎo)致排序方式單一、用戶(hù)友好性不足等問(wèn)題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種搜索方法和裝置,從而可提高搜索速度,降低系統(tǒng)資源的占用。本發(fā)明采用的技術(shù)方案具體是這樣實(shí)現(xiàn)的:一種搜索方法,該方法包括:A、為同一類(lèi)文檔設(shè)置至少一個(gè)關(guān)鍵屬性及相應(yīng)的關(guān)鍵屬性權(quán)重,并根據(jù)所述關(guān)鍵屬性和關(guān)鍵屬性權(quán)重計(jì)算各個(gè)文檔的關(guān)鍵屬性分值KFScore ; B、將全部待檢索文檔以詞源Term為關(guān)鍵字進(jìn)行索引,建立以Term為關(guān)鍵字索引、以包含該Term的文檔的總數(shù)TotalCount和包含該Term的文檔列表DocList為值的索引倒排表;所述文檔列表中的每條記錄中均包括一個(gè)文檔的文檔編號(hào)和關(guān)鍵屬性分值;所述文檔列表由有序列表和無(wú)序列表組成,所述有序列表中包括η個(gè)關(guān)鍵屬性分值最大、且按關(guān)鍵屬性分值從大到小順序排列的記錄;其中,所述η為預(yù)先確定的值;C、根據(jù)用戶(hù)輸入的檢索字符串生成相應(yīng)的詞源,根據(jù)所生成的詞源對(duì)所述索引倒排表進(jìn)行檢索,并根據(jù)用戶(hù)輸入的搜索結(jié)果范圍優(yōu)先從所生成的詞源對(duì)應(yīng)的有序列表中獲取記錄,以得到所需的搜索結(jié)果和相關(guān)結(jié)果總數(shù)。本發(fā)明中還提供了一種搜索裝置,該搜索裝置包括:倒排表生成模塊、存儲(chǔ)模塊、詞源生成模塊和檢索模塊;所述倒排表生成模塊,用于將全部待檢索文檔以詞源Term為關(guān)鍵字進(jìn)行索引,建立以Term為關(guān)鍵字索引、以包含該Term的文檔的總數(shù)TotalCount和包含該Term的文檔列表DocList為值的索引倒排表;所述文檔列表中的每條記錄中均包括一個(gè)文檔的文檔編號(hào)和關(guān)鍵屬性分值;所述文檔列表由有序列表和無(wú)序列表組成,所述有序列表中包括η個(gè)關(guān)鍵屬性分值最大、且按關(guān)鍵屬性分值從大到小順序排列的記錄;其中,所述η為預(yù)先確定的值;將所述索引倒排表發(fā)送給存儲(chǔ)模塊;所述存儲(chǔ)模塊,用于存儲(chǔ)所述索引倒排表;所述詞源生成模塊,用于根據(jù)用戶(hù)輸入的檢索字符串生成相應(yīng)的詞源;將所述詞源以及用戶(hù)輸入的搜索結(jié)果范圍發(fā)送給檢索模塊;所述檢索模塊,用于根據(jù)所生成的詞源對(duì)存儲(chǔ)模塊中存儲(chǔ)的索引倒排表進(jìn)行檢索,并根據(jù)用戶(hù)輸入的搜索結(jié)果范圍優(yōu)先從所生成的詞源對(duì)應(yīng)的有序列表中獲取記錄,以得到所需的搜索結(jié)果和相關(guān)結(jié)果總數(shù);將所述搜索結(jié)果和相關(guān)結(jié)果總數(shù)發(fā)送給用戶(hù)。由上述技術(shù)方案可見(jiàn),本發(fā)明中由于為文檔設(shè)置了關(guān)鍵屬性和關(guān)鍵屬性權(quán)重,因此可計(jì)算各個(gè)文檔的KFScore,并根據(jù)各個(gè)文檔的KFScore建立一個(gè)索引倒排表,使得該索引倒排表中的文檔列表由有序列表和無(wú)序列表組成。當(dāng)用戶(hù)輸入的檢索字符串時(shí),可生成相應(yīng)的詞源,并根據(jù)所生成的詞源對(duì)索引倒排表進(jìn)行檢索,根據(jù)用戶(hù)輸入的搜索結(jié)果范圍優(yōu)先從所生成的詞源對(duì)應(yīng)的有序列表中獲取記錄,以得到所需的搜索結(jié)果和相關(guān)結(jié)果總數(shù),從而可在保證搜索結(jié)果的相關(guān)性(即有效性)的前提下,多方面衡量各種信息的價(jià)值,以使得有價(jià)值的信息的排名靠前,因而可大大提高搜索速度,提高搜索引擎的搜索響應(yīng)時(shí)間;同時(shí),還可降低CPU和內(nèi)存等系統(tǒng)資源的占用,從而節(jié)約了大量的硬、軟件資源。
圖1是本發(fā)明中的搜索方法的流程圖。圖2為本發(fā)明中文檔的信息結(jié)構(gòu)圖。
圖3為本發(fā)明中索引倒排表的結(jié)構(gòu)示意圖。圖4為本發(fā)明中單Term搜索方法的流程圖。圖5為本發(fā)明具體實(shí)例中的索引倒排表的結(jié)構(gòu)示意圖。圖6為本發(fā)明中多Term搜索方法的流程圖。圖7為本發(fā)明中多層搜索方法的流程圖。圖8為本發(fā)明中步驟702的一種實(shí)現(xiàn)方法的流程圖。圖9為本發(fā)明中的搜索裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)表達(dá)得更加清楚明白,下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說(shuō)明。圖1是本發(fā)明中的搜索方法·的流程圖。如圖1所示,該方法包括:步驟101,為同一類(lèi)文檔設(shè)置至少一個(gè)關(guān)鍵屬性(KeyField)并預(yù)先設(shè)置各個(gè)關(guān)鍵屬性的關(guān)鍵屬性權(quán)重。在數(shù)據(jù)業(yè)務(wù)領(lǐng)域中,可將描述一個(gè)事物的信息集合稱(chēng)之為一個(gè)文檔(Document)。圖2為本發(fā)明中文檔的信息結(jié)構(gòu)圖。如圖2所示,在本發(fā)明的技術(shù)方案中,每個(gè)文檔中都包括多個(gè)詞源(Term)和多個(gè)屬性(Field);其中,所述屬性可以由一個(gè)或多個(gè)Term組成。例如,一個(gè)文檔中可以包括“標(biāo)題”、“內(nèi)容”等屬性,其中的“標(biāo)題”屬性可以由一個(gè)或多個(gè)Term組成。再例如,圖2中的屬性I由N個(gè)詞源組成,屬性J由M個(gè)詞源組成等。另外,在本發(fā)明的技術(shù)方案中,還將為每個(gè)文檔設(shè)置一個(gè)或多個(gè)用于標(biāo)識(shí)該文檔的重要信息的關(guān)鍵屬性,且同一類(lèi)文檔具有相同的關(guān)鍵屬性。如下的表I為本發(fā)明中關(guān)鍵屬性的示例說(shuō)明。
權(quán)利要求
1.一種搜索方法,其特征在于,該方法包括: A、為同一類(lèi)文檔設(shè)置至少一個(gè)關(guān)鍵屬性及相應(yīng)的關(guān)鍵屬性權(quán)重,并根據(jù)所述關(guān)鍵屬性和關(guān)鍵屬性權(quán)重計(jì)算各個(gè)文檔的關(guān)鍵屬性分值KFScore ; B、將全部待檢索文檔以詞源Term為關(guān)鍵字進(jìn)行索引,建立以Term為關(guān)鍵字索引、以包含該Term的文檔的總數(shù)TotalCount和包含該Term的文檔列表DocList為值的索引倒排表;所述文檔列表中的每條記錄中均包括一個(gè)文檔的文檔編號(hào)和關(guān)鍵屬性分值;所述文檔列表由有序列表和無(wú)序列表組成,所述有序列表中包括η個(gè)關(guān)鍵屬性分值最大、且按關(guān)鍵屬性分值從大到小順序排列的記錄;其中,所述η為預(yù)先確定的值; C、根據(jù)用戶(hù)輸入的檢索字符串生成相應(yīng)的詞源,根據(jù)所生成的詞源對(duì)所述索引倒排表進(jìn)行檢索,并根據(jù)用戶(hù)輸入的搜索結(jié)果范圍優(yōu)先從所生成的詞源對(duì)應(yīng)的有序列表中獲取記錄,以得到所需的搜索結(jié)果和相關(guān)結(jié)果總數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,計(jì)算文檔的KFScore的公式為:KFScore = KeyFieId^W^KeyFieICi2^W2+......+KeyFieldx^Wx ; 其中,W1+W2+......+Wx = I ;所述KeyFieldx表示所述文檔第X個(gè)KeyField的取值,所述Wx表示與所述文檔第X個(gè)KeyField相對(duì)應(yīng)的Weight的取值。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述搜索結(jié)果范圍包括:起始位置InitialPositon和條數(shù)Count ; 所述搜索結(jié)果范圍的最大值為:(InitialPositon+Count)-l。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述據(jù)用戶(hù)輸入的搜索結(jié)果范圍優(yōu)先從所生成的詞源對(duì)應(yīng)的有序列表中獲取記錄,以得到所需的搜索結(jié)果包括: 當(dāng)所述搜索結(jié)果范圍的最大值小于或等于所生成的詞源對(duì)應(yīng)的有序列表的長(zhǎng)度η時(shí),從所述有序列表中的第InitialPositon條記錄開(kāi)始,讀取Count條記錄作為搜索結(jié)果;當(dāng)所述搜索結(jié)果范圍的起始位置位于所生成的詞源對(duì)應(yīng)的有序列表中,且所述搜索結(jié)果范圍的最大值大于所述有序列表的長(zhǎng)度η時(shí),從所述有序列表中的第InitialPositon條記錄開(kāi)始,讀取(n-1nitialPositon+Ι)條記錄;將所生成的詞源對(duì)應(yīng)的無(wú)序列表中的記錄按KFScore的大小順序排列,并從所述無(wú)序列表中的第I條記錄開(kāi)始,讀取[Count- (n-1nitialPositon+1)]條記錄;將所讀取的Count條記錄作為搜索結(jié)果; 當(dāng)所述搜索結(jié)果范圍的起始位置位于所生成的詞源對(duì)應(yīng)的無(wú)序列表中時(shí),將所述無(wú)序列表中的記錄按KFScore的大小順序排列,然后從排序后的無(wú)序列表中的第(InitialPositon-n)條記錄開(kāi)始,讀取Count條記錄作為搜索結(jié)果。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,步驟C中還進(jìn)一步包括: 當(dāng)所述索引倒排表中未存儲(chǔ)根據(jù)用戶(hù)輸入的檢索字符串所生成的詞源時(shí),將空集作為搜索結(jié)果。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C包括: Cl、根據(jù)用戶(hù)輸 入的檢索字符串生成一個(gè)相應(yīng)的詞源; c2、根據(jù)所生成的詞源檢索索引倒排表,判斷所述索引倒排表中是否存儲(chǔ)有該詞源;如果是,則執(zhí)行步驟c3 ;否則,執(zhí)行步驟cl5 ; c3、從所述索引倒排表中讀取與所述詞源相對(duì)應(yīng)的文檔列表; c4、對(duì)用戶(hù)輸入的搜索結(jié)果范圍進(jìn)行解析,獲得起始位置InitialPositon和條數(shù)Count ; c5、判斷(InitialPositon+Count)-l > n是否成立,如果是,則執(zhí)行步驟c6 ;否則,執(zhí)行步驟cl2 ;其中,所述η為有序列表的長(zhǎng)度; c6、判斷InitialPositon > η是否成立,如果是,則執(zhí)行步驟clO ;否則,執(zhí)行步驟c7 ;c7、從有序列表中的第InitialPositon條記錄開(kāi)始,讀取(n-1nitialPositon+Ι)條記錄加入到搜索結(jié)果列表ResultList中; c8、將所述無(wú)序列表中的記錄按KFScore的大小順序排列; c9、從所述無(wú)序列表中讀取[Count- (n-1nitialPositon+1)]條記錄加入到ResultList中,執(zhí)行步驟cl3 ; clO、將所述無(wú)序列表中的記錄按KFScore的大小順序排列; ell、從排序后的無(wú)序列表中的第(InitialPositon-n)條記錄開(kāi)始,讀取Count條記錄加入到ResultList中,執(zhí)行步驟cl3 ; cl2、從有序列表中的第InitialPositon條記錄開(kāi)始,讀取Count條記錄加入到ResultList中,執(zhí)行步驟cl3 ; cl3、將所述ResultList作為搜 索結(jié)果,并將從所述索引倒排表中讀取的與所述詞源相對(duì)應(yīng)的文檔列表的文檔總數(shù)TotalCount作為相關(guān)結(jié)果總數(shù);cl4、將所述搜索結(jié)果和相關(guān)結(jié)果總數(shù)返回給用戶(hù)。結(jié)束流程;cl5、將空集作為搜索結(jié)果,設(shè)相關(guān)結(jié)果總數(shù)等于O,將所述空集和相關(guān)結(jié)果總數(shù)返回給用戶(hù),結(jié)束流程。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C包括: Cl、在索引倒排表的文檔列表中設(shè)置Y段讀取范圍;其中,Y > 2 ; C2、根據(jù)用戶(hù)輸入的檢索字符串生成一個(gè)詞源隊(duì)列TermArray和查詢(xún)邏輯序列SetOperators ; C3、對(duì)用戶(hù)輸入的搜索結(jié)果范圍進(jìn)行解析,獲得起始位置InitialPositon和條數(shù)Count ; C4、當(dāng)TermArray的長(zhǎng)度大于I時(shí),讀取TermArray中的前兩個(gè)詞源,并設(shè)置初始值為2的變量i和初始值為I的變量j ; C5、根據(jù)所讀取的兩個(gè)詞源分別檢索索引倒排表,從所述索引倒排表中分別讀取與所述兩個(gè)詞源相對(duì)應(yīng)的文檔列表中第j段讀取范圍內(nèi)的記錄,將所讀取的記錄分別存儲(chǔ)于第一檢索結(jié)果列表ResultListl和第二檢索結(jié)果列表ResultList2中; C6、讀取SetOperators中的第(1-Ι)個(gè)邏輯符號(hào); C7、判斷所讀取的邏輯符號(hào)的取值;當(dāng)所述邏輯符號(hào)的取值為AND時(shí),執(zhí)行步驟CS ;當(dāng)所述邏輯符號(hào)的取值為OR時(shí),執(zhí)行步驟C9 ;當(dāng)所述邏輯符號(hào)的取值為SUB時(shí),執(zhí)行步驟ClO ; C8、使用與邏輯合并ResultListl和ResultList2,合并結(jié)果加入到搜索結(jié)果列表ResultList中;執(zhí)行步驟Cll ; C9、使用或邏輯合并ResultListl和ResultList2,合并結(jié)果加入到ResultList中;執(zhí)行步驟Cll ; C10、使用差邏輯合并ResultListl和ResultList2,合并結(jié)果加入到ResultList中;執(zhí)行步驟Cll ; CU、判斷TermArray中是否還有詞源未使用;如果是,則執(zhí)行步驟C12 ;否則,執(zhí)行步驟C13 ; C12、設(shè) i = i+1,讀取 TermArray 中的第 i 個(gè)詞源;清空 ResultListl 和 ResultList2,并將ResultList中的記錄復(fù)制到ResultList2中;根據(jù)所讀取的詞源檢索所述索引倒排表,從所述索引倒排表中讀取與所讀取的詞源相對(duì)應(yīng)的文檔列表中第j段讀取范圍內(nèi)的記錄,將所讀取的記錄存儲(chǔ)于ResultListl中;返回執(zhí)行步驟C6 ; C13、判斷是否滿(mǎn)足結(jié)束條件;如果是,則執(zhí)行步驟C16 ;否則,執(zhí)行步驟C14 ; C14、清空ResultListl和ResultList2 ;讀取TermArray中的前兩個(gè)詞源,并設(shè)置i = 2且j = j+1 ;根據(jù)上述所讀取的兩個(gè)詞源分別檢索索引倒排表,從所述索引倒排表中分別讀取與所述兩個(gè)詞源相對(duì)應(yīng)的文檔列表中第j段讀取范圍內(nèi)的記錄,分別存儲(chǔ)于ResultListl 和 ResultList2 中; C15、分別將所述ResultListl和ResultList2中的記錄按KFScore的大小順序排列;返回執(zhí)行步驟C6; C16、將總檢索結(jié)果集合中所存儲(chǔ)的記錄的數(shù)目作為相關(guān)結(jié)果總數(shù); C17、向用戶(hù)返回搜索結(jié)果和相關(guān)結(jié)果總數(shù)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于, 當(dāng)Y = 2時(shí),將文檔列表的有序列表作為第I段讀取范圍,將整個(gè)文檔列表作為第2段讀取范圍。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于, 當(dāng)Y = 3時(shí),將文檔列表的有序列表作為第I段讀取范圍,將文檔列表的無(wú)序列表作為第2段讀取范圍,將整個(gè)文檔列表作為第3段讀取范圍。
10.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟C5中還進(jìn)一步包括: 如果索引倒排表中未存儲(chǔ)所述兩個(gè)詞源中的任意一個(gè)詞源,則將未存儲(chǔ)的詞源所對(duì)應(yīng)的檢索結(jié)果列表設(shè)置為空集。
11.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述使用與邏輯合并ResultListl和ResultList2,并將合并結(jié)果加入到ResultList中包括: 逐一比較ResultListl和ResultList2中的各條記錄,將兩個(gè)檢索結(jié)果列表中KFScore和Did相同的兩條記錄作為一個(gè)搜索結(jié)果加入到ResultList中。
12.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述使用或邏輯合并ResultListl和ResultList2,并將合并結(jié)果加入到ResultList中可以包括: 將所述ResultListl和ResultList2中的各條記錄加入到ResultList中,如果有兩條記錄的KFScore和Did均相同,貝U在ResultList中刪除其中的一條記錄。
13.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述使用差邏輯合并ResultListl和ResultList2,并將合并結(jié)果加入到ResultList中可以包括: 從所述ResultListl中去除ResultList2中存儲(chǔ)的各條記錄,將進(jìn)行去除操作后的ResultListl中的記錄加入到ResultList中。
14.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述步驟C12中還進(jìn)一步包括: 如果索引倒排表中未存儲(chǔ)上述所讀取的第i個(gè)詞源,則將所述ResultListl設(shè)置為空集,再返回執(zhí)行步驟C6。
15.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述結(jié)束條件為: ResultList中所存儲(chǔ)的記錄的數(shù)目大于搜索結(jié)果范圍的最大值;或者,j等于Y。
16.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述從所述ResultList中讀取所需的記錄作為搜索結(jié)果包括: 當(dāng) SumCount ^ (InitialPositon+Count)-1 時(shí),從所述 ResultList 中的第InitialPositon條記錄開(kāi)始,讀取Count條記錄作為搜索結(jié)果;當(dāng) InitialPositon ^ SumCount < (InitialPositon+Count) -1 時(shí),從所述 ResultList中的第InitialPositon條記錄開(kāi)始,讀取(SumCount-1nitialPositon+l)條記錄作為搜索結(jié)果; 當(dāng)SumCount < InitialPositon時(shí),將空集作為搜索結(jié)果。
17.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C包括: 根據(jù)預(yù)先設(shè)定的搜索排序規(guī)則預(yù)先設(shè)置多層搜索過(guò)程,并設(shè)置各層搜索過(guò)程的優(yōu)先級(jí)以及各層搜索過(guò)程的分層搜索分值范圍; 當(dāng)用戶(hù)輸入檢索字符串時(shí),按照優(yōu)先級(jí)的高低順序進(jìn)行各層搜索。
18.根據(jù)權(quán)利 要求17所述的方法,其特征在于,所述根據(jù)預(yù)先設(shè)定的搜索排序規(guī)則預(yù)先設(shè)置多層搜索過(guò)程,并設(shè)置各層搜索過(guò)程的優(yōu)先級(jí)包括: 在音樂(lè)搜索領(lǐng)域,設(shè)置如下的三層搜索過(guò)程:精確層搜索過(guò)程、全拼層搜索過(guò)程和分詞層搜索過(guò)程;且各層搜索過(guò)程的優(yōu)先級(jí)按從高到低的順序?yàn)?精確層搜索過(guò)程、全拼層搜索過(guò)程、分詞層搜索過(guò)程;
19.根據(jù)權(quán)利要求18所述的方法,其特征在于,該方法還進(jìn)一步包括: 將每層搜索過(guò)程分為多個(gè)子層搜索過(guò)程,并設(shè)定各個(gè)子層搜索過(guò)程的優(yōu)先級(jí)。
20.根據(jù)權(quán)利要求17所述的方法,其特征在于,所述設(shè)置各層搜索過(guò)程的分層搜索分值范圍包括: 當(dāng)設(shè)置有3層搜索過(guò)程,且各層搜索過(guò)程的優(yōu)先級(jí)按從高到低的順序?yàn)?第一層搜索過(guò)程、第二層搜索過(guò)程、第三層搜索過(guò)程時(shí), 將第一層搜索過(guò)程的分層搜索分值范圍設(shè)為:[A1,A2];將第二層搜索過(guò)程的分層搜索分值范圍設(shè)為:[B1,B2];將第三層搜索過(guò)程的分層搜索分值范圍設(shè)為:[Cl,C2];其中,Al > A2 > BI > B2 > Cl > C2。
21.根據(jù)權(quán)利要求17所述的方法,其特征在于,所述當(dāng)用戶(hù)輸入檢索字符串時(shí),按照優(yōu)先級(jí)的高低順序進(jìn)行各層搜索包括: Z1、根據(jù)預(yù)先設(shè)置的各層搜索過(guò)程對(duì)用戶(hù)輸入的檢索字符串進(jìn)行解析,分別生成與各層搜索過(guò)程相對(duì)應(yīng)的詞源隊(duì)列和查詢(xún)邏輯序列 Z2、對(duì)用戶(hù)輸入的搜索結(jié)果范圍進(jìn)行解析,獲得起始位置和條數(shù); Z3、根據(jù)預(yù)先設(shè)定的優(yōu)先級(jí),將當(dāng)前未執(zhí)行的且優(yōu)先級(jí)最高的搜索過(guò)程確定為當(dāng)前搜索過(guò)程; Z4、根據(jù)與當(dāng)前搜索過(guò)程相對(duì)應(yīng)的詞源隊(duì)列和查詢(xún)邏輯序列對(duì)索引倒排表進(jìn)行檢索,將檢索結(jié)果存儲(chǔ)在分層檢索結(jié)果集合中并得到當(dāng)前分層檢索結(jié)果總數(shù) Z5、根據(jù)各個(gè)檢索結(jié)果的KFScore以及當(dāng)前搜索過(guò)程的分層搜索分值范圍,計(jì)算分層檢索結(jié)果集合中各個(gè)檢索結(jié)果的分層搜索分值。
Z6、將分層檢索結(jié)果集合中的檢索結(jié)果按照分層搜索分值的大小加入到總檢索結(jié)果集合中,并刪除重復(fù)的檢索結(jié)果;計(jì)算得到當(dāng)前的總檢索結(jié)果總數(shù),并清空所述分層檢索結(jié)果集合; Z7、判斷是否滿(mǎn)足結(jié)束條件;如果是,則執(zhí)行步驟Z8 ;否則,返回執(zhí)行步驟Z3 ; Z8、根據(jù)搜索結(jié)果范圍從所述總檢索結(jié)果集合中讀取所需條數(shù)的檢索結(jié)果作為搜索結(jié)果;將當(dāng)前的總檢索結(jié)果總數(shù)作為相關(guān)結(jié)果總數(shù)SumCount ; Z9、向用戶(hù)返回搜索結(jié)果和搜索結(jié)果總數(shù)。
22.根據(jù)權(quán)利要求21所述的方法,其特征在于,所述根據(jù)各個(gè)檢索結(jié)果的KFScore以及當(dāng)前搜索過(guò)程的分層搜索分值范圍,計(jì)算分層檢索結(jié)果集合中各個(gè)檢索結(jié)果的分層搜索分值包括: 根據(jù)當(dāng)前搜索過(guò)程的分層搜索分值范圍以及分層檢索結(jié)果集合中各個(gè)檢索結(jié)果按照KFScore從大到小的排列順序,為各個(gè)檢索結(jié)果設(shè)置相應(yīng)的分層搜索分值。
23.根據(jù)權(quán)利要求21所述的方法,其特征在于,所述結(jié)束條件可以為: 當(dāng)前的總檢索結(jié)果總數(shù)大于搜索結(jié)果范圍的最大值;或者,當(dāng)前搜索過(guò)程為最后一層搜索過(guò)程。
24.根據(jù)權(quán)利要求 21所述的方法,其特征在于,所述根據(jù)搜索結(jié)果范圍從所述總檢索結(jié)果集合中讀取所需條數(shù)的檢索結(jié)果作為搜索結(jié)果包括: 當(dāng)SumCount彡(InitialPositon+Count)-1時(shí),從所述總檢索結(jié)果集合中的第InitialPositon條記錄開(kāi)始,讀取Count條記錄作為搜索結(jié)果; 當(dāng) InitialPositon ^ SumCount < (InitialPositon+Count) -1 時(shí),從所述總檢索結(jié)果集合中的第InitialPositon條記錄開(kāi)始,讀取(SumCount-1nitialPositon+l)條記錄作為搜索結(jié)果; 當(dāng)SumCount < InitialPositon時(shí),將空集作為搜索結(jié)果。
25.一種搜索裝置,其特征在于,該搜索裝置包括:倒排表生成模塊、存儲(chǔ)模塊、詞源生成模塊和檢索模塊; 所述倒排表生成模塊,用于將全部待檢索文檔以詞源Term為關(guān)鍵字進(jìn)行索引,建立以Term為關(guān)鍵字索引、以包含該Term的文檔的總數(shù)TotalCount和包含該Term的文檔列表DocList為值的索引倒排表;所述文檔列表中的每條記錄中均包括一個(gè)文檔的文檔編號(hào)和關(guān)鍵屬性分值;所述文檔列表由有序列表和無(wú)序列表組成,所述有序列表中包括η個(gè)關(guān)鍵屬性分值最大、且按關(guān)鍵屬性分值從大到小順序排列的記錄;其中,所述η為預(yù)先確定的值;將所述索引倒排表發(fā)送給存儲(chǔ)模塊; 所述存儲(chǔ)模塊,用于存儲(chǔ)所述索引倒排表; 所述詞源生成模塊,用于根據(jù)用戶(hù)輸入的檢索字符串生成相應(yīng)的詞源;將所述詞源以及用戶(hù)輸入的搜索結(jié)果范圍發(fā)送給檢索模塊; 所述檢索模塊,用于根據(jù)所生成的詞源對(duì)存儲(chǔ)模塊中存儲(chǔ)的索引倒排表進(jìn)行檢索,并根據(jù)用戶(hù)輸入的搜索結(jié)果范圍優(yōu)先從所生成的詞源對(duì)應(yīng)的有序列表中獲取記錄,以得到所需的搜索結(jié)果和相關(guān)結(jié)果總數(shù);將所述搜索結(jié)果和相關(guān)結(jié)果總數(shù)發(fā)送給用戶(hù)。
全文摘要
本發(fā)明提供了一種搜索方法和裝置。其中的搜索方法包括為同一類(lèi)文檔設(shè)置關(guān)鍵屬性和關(guān)鍵屬性權(quán)重,計(jì)算各個(gè)文檔的關(guān)鍵屬性分值;建立索引倒排表;索引倒排表中的文檔列表中的每條記錄中均包括一個(gè)文檔的文檔編號(hào)和關(guān)鍵屬性分值;所述文檔列表由有序列表和無(wú)序列表組成,所述有序列表中包括n個(gè)關(guān)鍵屬性分值最大、且按關(guān)鍵屬性分值從大到小順序排列的記錄;其中,所述n為預(yù)先確定的值;根據(jù)用戶(hù)輸入的檢索字符串生成相應(yīng)的詞源,根據(jù)所生成的詞源對(duì)所述索引倒排表進(jìn)行檢索,并根據(jù)用戶(hù)輸入的搜索結(jié)果范圍優(yōu)先從所生成的詞源對(duì)應(yīng)的有序列表中獲取記錄,以得到所需的搜索結(jié)果和相關(guān)結(jié)果總數(shù)。應(yīng)用本發(fā)明可以提高搜索速度,降低系統(tǒng)資源的占用。
文檔編號(hào)G06F17/30GK103186650SQ201110461128
公開(kāi)日2013年7月3日 申請(qǐng)日期2011年12月30日 優(yōu)先權(quán)日2011年12月30日
發(fā)明者簡(jiǎn)勤, 郭正平, 陳健驥, 何丹, 賴(lài)航, 肖巍, 鄭長(zhǎng)松, 王全禮, 楊俊拯 申請(qǐng)人:中國(guó)移動(dòng)通信集團(tuán)四川有限公司