Lucene.Net 2.3.1開發介紹 —— 三、索引(五)

話接上篇,繼續來說權重對排序的影響。從上面的4個測試,只能說是有個直觀的理解了。“哦,是!調整權重是能影響排序了,但是好像沒辦法來分析到底怎麼調啊!”。似乎是這樣,現在需要把問題放大,加大索引的內容。到博客園新聞區,用zzk找了4篇內容包含“測試”的文章。代碼變成 2.1.5
ContractedBlock.gif代碼2.1.5

 

OK,測試一下。

 

搜索詞:測試
結果:
最聰明的瀏覽器和操作系統_得分:0.17                                         //第四條記錄,字數最少
微軟Office 14即將展開Alpha測試_得分:0.14                                //第一條記錄,字數和第三條相差不大
谷歌測試人力翻譯服務 有利於推廣其支付平臺_得分:0.13                 //第三條記錄,和第一條記錄字數差不太多
IBM和微軟將測試雲計算的新的極限_得分:0.12                              //第二條記錄,字數最多
-----------------------------------

 

可以看出,文檔長度,測試都有一定的影響。現在試着把分少的往高調。把第二條記錄增加0.1的權重。

 

搜索詞:測試
結果:
最聰明的瀏覽器和操作系統_得分:0.17
IBM和微軟將測試雲計算的新的極限_得分:0.15
微軟Office 14即將展開Alpha測試_得分:0.14
谷歌測試人力翻譯服務 有利於推廣其支付平臺_得分:0.13
-----------------------------------

 

暈倒,怎麼上面兩條也變掉了?那是因爲Lucene.Net中權重最小的文檔是計算其他文檔的一個基礎。其它文檔的分是以這個爲基礎,算出來的。因此改變最小的會影響好多個。不過這個影響現在並沒有影響排序。而再加0.1,就變成了:

 

搜索詞:測試
結果:
最聰明的瀏覽器和操作系統_得分:0.17
IBM和微軟將測試雲計算的新的極限_得分:0.15
微軟Office 14即將展開Alpha測試_得分:0.14
谷歌測試人力翻譯服務 有利於推廣其支付平臺_得分:0.13
-----------------------------------

跑到第二位去了。可見每增加0.1,會對結果造成很大的變動。而且干擾似乎也不是太大,看來0.1就夠了。現在試試把權重還原,然後調整第一條記錄的權重。增加0.1後變成:

 

搜索詞:測試
結果:
微軟Office 14即將展開Alpha測試_得分:0.17
最聰明的瀏覽器和操作系統_得分:0.17
谷歌測試人力翻譯服務 有利於推廣其支付平臺_得分:0.13
IBM和微軟將測試雲計算的新的極限_得分:0.12
-----------------------------------

下面的基礎值又回去了,而第一條也跑到第一位去了。

 

現在假設我要把第二條記錄調到第一位,其他地方權重全部還原。把第一第三條記錄對調一下。嘿嘿,我設置個30,肯定能到第一位了吧!測試結果:

 

搜索詞:測試
結果:
IBM和微軟將測試雲計算的新的極限_得分:1.00
最聰明的瀏覽器和操作系統_得分:0.04
微軟Office 14即將展開Alpha測試_得分:0.04
谷歌測試人力翻譯服務 有利於推廣其支付平臺_得分:0.03
-----------------------------------

是到第一位去了,不過其他文檔的得分都快變成0了。原來,在Lucene.Net中,文檔的最高評分就是1。如果一旦有文檔到了1,那麼其他文檔都會根據這個1的含金量進行調整。比如你把它的權重調成10000,那麼其他的都會變成0,但這並不會影響排序。你要有耐心,一點點調試,就會看到,在文檔分接近1的過程中,其他文檔的分不會發生改變,而一旦到了1還有加,其他的文檔分都會變低。永遠不會有兩個文檔評分都到1。

 

現在再來試試完全匹配。把第四條記錄的內容就換成測試兩個字。那麼它的評分會高達0.97分。其他值一般需要權重調正到8,才能和它抗衡。調整0.1就會對索引結果產生很大影響,如果設置權重,一般是按一套規則來做的,如果,大家都設置很大的數字,得分就會都很高,對於有時候需要給你的廣告客戶設置個第一位置來說,就容易產生混亂。混亂的問題呆會再說,現在要說的是字數少的評分太高的問題。有兩個辦法解決,一個就是降低字數過少內容的權重,但是注意不要設置爲0,設置爲0就認爲是沒有包含查詢關鍵字了;另一個辦法就是修改評分。修改評分等說到搜索的時候再來講。

 

現在再來看看剛纔說到的混亂問題,這個問題很重要。如果你要設置一個文檔在搜索一個關鍵字的時候在第一位,你設置了它很高的權重,那麼問題也來了,對於其他詞,其它它包含的詞,它也會跑到前面去。看來把文檔的權重設置太高也不好,個人認爲以0.1爲單位就足夠了,當然對於一些應用需要自己把握。比如,對於論壇帖子,一個回覆你給它加0.1分也不是個好主意。

 

以上的討論都是基於感性的認識,真正要研究,還需要對公式的增長曲線進行嚴格的分析才能下定論!

 

那要置頂要怎麼辦呢?這就要從另外一種設置權重的方法講起了。

發佈了70 篇原創文章 · 獲贊 5 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章