如何大幅優化solr的查詢性能(轉)


提升軟件性能,通常喜歡去調整各種啟動參數,這沒有多大意義,小伎倆。 性能優化要從架構和策略入手,才有可能得到較大的收益

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

  1. classArticle
  2. {
  3.    String title;
  4.    String content;
  5.    String tags;
  6. }

查詢參數: 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. <fieldname="title"type="text_general"indexed="true"stored="true"/>
  2. <fieldname="content"type="text_general"indexed="true"stored="true"/>
  3. <fieldname="tags"type="text_general"indexed="true"stored="true"/>
  4. <fieldname="text"type="text_general"indexed="true"stored="false"multiValued="true"/>
  5. <copyFieldsource="title"dest="text"/>
  6. <copyFieldsource="content"dest="text"/>
  7. <copyFieldsource="tags"dest="text"/>

這種schema定義方式,既可以對單個field指定查詢權重,也可以在泛查詢的時候提升性能,同時生成索引數據的時候不需要多寫任何代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM