讓solr的查詢效能更上一層樓

尛沫發表於2014-03-26

大家總是中意用調整各種啟動引數去讓軟體得到提升,其實這對軟體本身質量的提高並沒有什麼意義,純粹是小聰明而已。提高軟體質量首先要從要從架構和策略開始著手,只有這樣才有可能得到自己滿意的結果。

Solr的查詢是基於Field的,以Field為基本單元,例如一個文章站要索引

  1. classArticle
  2. {
  3. String title;
  4. String content;
  5. String tags;
  6. }
  7. 查詢引數: q=title:big && content:six

Solr會順序執行兩次 field查詢,這個開銷非常大。有個實際的案例:50萬條記錄,一次在6,7個欄位上檢索,24 core的伺服器也需要10-20ms

如果把title和content 合併,那隻需要查詢一次,效能可以提升50%

在生成索引xml的時候,把title和content填入同一個欄位,就能達到這種效果,但是產生新的問問題

無法對title和content的查詢分別指定權重了,一般來說,title的權重要高於content

Solr給出一種解決方法:在schema中使用 copyField

上述的Article Schema可以寫成如下這種格式,就能達到效果

  1. 這種schema定義方式,既可以對單個field指定查詢權重,也可以在泛查詢的時候提升效能,同時生成索引資料的時候不需要多寫任何程式碼。

本文為Anyforweb技術分享部落格,需要了解網站建設相關,請訪問anyforweb.com。

相關文章