的用例增加Solr的性能
我有潛在的數以百萬計的文檔的索引。我想對這些文檔的子集進行大約20'0000次搜索(大約25000個文檔)。這些25'000個文檔可能佔據Solr中存儲的大約100 MB(由存儲和索引文本字段組成)。
的問題
隨着索引的文檔數量的增加,查詢的性能會降低很多。例如,運行20'000次搜索,在100,000個文檔索引上打出25000個文檔需要大約4分鐘。在200'000文檔索引上運行相同的搜索大約需要20分鐘。
那麼,有沒有辦法打他們的搜索之前緩存在內存中,這些文件25000?
UPDATE
有些事情,真的幫助:
減少返回的行數(在幾乎所有情況下,我不得不通過返回的結果進行迭代,並在幾乎所有情況下,不超過100個匹配結果,但我已經將行設置爲一個非常大的值,減少行數提高了2倍左右的性能,這看起來非常直觀,如果只有79個匹配d我將返回的行數設置爲100,它的執行效果比79行匹配的行更好,我將行數設置爲1000.在第一種情況下,Solr已經返回找到的項目計數並快速執行。爲什麼要有一個性能差異?)
減少多線程(我已經添加了多個線程的發展框,因爲查詢還有更多的可用資源。在資源受限的生產箱就放緩下來。使用只有一個或兩個線程在我周圍2倍的速度提升)
有些事情沒有真正的幫助:
分裂場查詢(我已經在使用現場查詢到處是可能的,但我是在一個FQ它們合併爲每個查詢
fq=name:a AND type:b
。用fq=name:a&fq=type:b
將它們分開緩存(見Apache Solr documentation),並可以提高性能。但在這種情況下並沒有太大的區別。更改緩存設置在這種情況下,filterCache似乎具有最大潛力。但是,增加或更改設置並沒有太大的區別。
感謝您的答覆,將嘗試不同的緩存選項,在這裏留言,如果有任何改善。問題是RAM非常有限,所以如果我能夠以某種方式提示solr應該緩存哪些文檔,那將是一件好事。 – chris544
當然,試着先用FQ限制查詢,我有一種感覺,你會在那裏得到最大的回報。 – browskie
剛剛更新了最新結果的問題。 – chris544