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>
9
void 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,你不調?那不是讓水貼浮到最上層了麼?
以上都是些經驗之談,大家可以結合實際情況自己做一些調整。經驗主義,有錯誤和不足的地方,大家多包涵,指正,呵呵。