提升軟件性能,通常喜歡去調整各種啟動參數,這沒有多大意義,小伎倆。 性能優化要從架構和策略入手,才有可能得到較大的收益
Solr的查詢是基於Field的,以Field為基本單元,例如一個文章站要索引
classArticle{String title;String content;String tags;}
查詢參數: 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可以寫成如下這種格式,就能達到效果
- <fieldname="title"type="text_general"indexed="true"stored="true"/>
- <fieldname="content"type="text_general"indexed="true"stored="true"/>
- <fieldname="tags"type="text_general"indexed="true"stored="true"/>
- <fieldname="text"type="text_general"indexed="true"stored="false"multiValued="true"/>
- <copyFieldsource="title"dest="text"/>
- <copyFieldsource="content"dest="text"/>
- <copyFieldsource="tags"dest="text"/>
這種schema定義方式,既可以對單個field指定查詢權重,也可以在泛查詢的時候提升性能,同時生成索引數據的時候不需要多寫任何代碼
