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

來源:互聯網
上載者:User

2.2 Field的Boost

如果說Document的Boost是一條線,那麼Field的Boost則是一個點。怎麼理解這個點呢?設定Document的Boost會影響所有欄位。在搜尋的過程中,一般至少會搜尋兩個Field,比如同時搜尋標題和內容。而Document的Boost將同時影響標題和內容的搜尋得分,但是設定Field的Boost則不會有那麼大的影響,Field的Boost只會影響一個點。那這個點有什麼用呢?

 

現在來做個假設,假設,現在有一條記錄是關於Lucene的,這篇文章講得很好,我想要讓別人搜尋Lucene這個關鍵字的時候,這條記錄一定排在前10。怎麼辦?設定Docuement的Boost?設定得還很高?OK!這篇文章裡面也有其他關鍵字,比如"asp.net","Sql Server"。現在搜尋"asp.net",發現這篇文章也跑到前10了。這可不是我想要的。

 

怎麼辦呢?

 

現在有兩個解決辦法,一個就是冗餘一個Field,裡面記錄了Tag一類的東西,給這篇文章設定Tag值為“Lucene”,同時在索引tag欄位的時候把它的Boost調高。比如代碼2.2.1,在添加完文檔後把該文檔的tag這個Field Boost設定為想要的。

 

代碼2.2.1
 1/**//// <summary>
 2/// 添加文檔
 3/// </summary>
 4/// <param name="writer">維護文件管理器</param>
 5/// <param name="title">標題</param>
 6/// <param name="content">內容</param>
 7/// <param name="tag">tag</param>
 8/// <param name="boost">tag的boost</param>
 9void AddDocument(IndexWriter writer, string title, string content, string tag, float boost)
10{
11    Document document = new Document();
12    document.Add(new Field("title", title, Field.Store.YES, Field.Index.TOKENIZED));
13    document.Add(new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
14    document.Add(new Field("tag", content, Field.Store.YES, Field.Index.TOKENIZED));
15    document.GetField("tag").SetBoost(boost);
16    writer.AddDocument(document);
17}

 

 

當然,這樣處理不是很好,一來,增加一個欄位,給維護上帶來難度,而且很多好文章沒tag怎麼辦,再有就是非站內搜尋呢?另一種辦法就是設定一個字數相對較少的欄位,調高它的Boost。

 

比如,我現在把Title這個欄位的Boost調成1.3,也就是說我搜尋的時候,title的權重要比content的高,那麼當我標題中含有Lucene的時候,得分總是會偏高,那樣,就可以把記錄調到前面去了。這裡千萬不要調高content,如果全部調的話影響也不是太大,但是對於搜尋整體的品質有很大影響。為什麼這麼說呢?因為如果標題裡含有一個keyword "a",那麼這篇文章一般有關於這個“a”的內容,但是如果內容裡含有“a”而標題沒有,非常多的文章實際上都不是講“a”的。

 

2.3 怎麼有效調整得分

 

這裡只是我的一些調整的經驗,其實想一想也就明白了,沒什麼深奧的。

 

(1)、首先,標題的權重一定比內容的要高;

(2)、根據實際情況調整權重;

          比如,現在要索引論壇的內容,那完全可以設定內容很少的文章權重非常低,這個時候直接設定Document的權重就行了;而如果這個文章的回複或者訪問量  又非常高,那麼每個回複或者瀏覽量,給加0.01的基數,讓這個總體量不超過0.2;要是這個文章是精華貼呢?直接加上0.1吧。

          實際的調整過程就是你把各種問題想想全面就好了。

(3)、如果要把一個文檔的Document的Boost調得非常高,比如調整成2,那麼千萬要注意,減少它的內容,內容中出現的詞越少越好;

          比如,像baidu那種的做個廣告,那麼就在裡面放一個商家買的關鍵詞就行了,其它什麼也不要。

(4)、寧可設定Field,比設定Document來得好,設定的方法就不用說啦。

 

要注意的是,越短的文章,越要降低它的權重。比如它只有兩個字,怎麼也要把它的權重調到0.1一下。為什嗎?因為兩個字一般是一個詞,這個詞如果被搜尋,得分就是1,你不調?那不是讓水貼浮到最上層了嗎?

 

以上都是些經驗之談,大家可以結合實際情況自己做一些調整。經驗主義,有錯誤和不足的地方,大家多包涵,指正,呵呵。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.