Solr / Lucene fieldCache Сортировка ошибок OutOfMemory на динамическом поле
У нас есть ядро Solr, которое имеет около 250TrieIntField
s (объявлен какdynamicField
). В нашем индексе Solr содержится около 14 миллионов документов, и многие документы имеют определенную ценность во многих из этих полей. Нам необходимо отсортировать все эти 250 полей за определенный период времени.
Проблема, с которой мы сталкиваемся, заключается в том, чтоfieldCache
заполняется очень быстро. У нас есть коробка 4 ГБ, а размер индекса составляет 18 ГБ. После сортировки по 40 или 45 из этих динамических полей потребление памяти составляет около 90%, и мы начинаем получать ошибки OutOfMemory.
На данный момент у нас есть задание cron, которое запускается каждую минуту, перезапуская tomcat, если общее потребление памяти превышает 80%.
Из того, что я прочитал, я понимаю, что ограничение числа различных значений в сортируемых полях Solr приведет к снижениюfieldCache
пространство. Значения в этих сортируемых полях могут быть любыми целыми числами от 0 до 33000 и довольно широко распределены. У нас есть несколько масштабных решений, но как лучше всего решить эту проблему?
ОБНОВЛЕНИЕ: Мы думали, вместо сортировки, если мы сделали повышение, выиграл 'зайти в fieldCache. Таким образом, вместо выдачи запроса, как
select?q=name:alba&sort=relevance_11 desc
мы попытались
select?q={!boost relevance_11}name:alba
но, к сожалению, повышение также заполняет кэш поля :(