Solr возвращает нехватку памяти, когда я запрашиваю произвольные строки - PullRequest
1 голос
/ 15 марта 2012

Я обнаружил, что запрос с одной строкой завершается сбоем, если я запрашиваю произвольно большое количество строк.

Ошибка, выдаваемая сервером, составляет 500 - с сообщением об исключении "Недостаточно памяти".

Это происходит сбой:

http://localhost:8983/solr/myIndex1/select?rows=100000&q=*%3A*&fq=group%3term1_JAYUNIT100&fq=grid%3A75&wt=json&indent=on

Это не происходит сбой:

http://localhost:8983/solr/myIndex1/select?rows=1&q=*%3A*&fq=group%3term1_JAYUNIT100&fq=grid%3A75&wt=json&indent=on

Это странно для меня - я не понимаю, почему Solr использовал бы дополнительную память для запроса, которыйвозвращает только одну строку.Есть ли какое-то предварительное распределение ресурсов, которое происходит на стороне сервера перед выполнением запроса, основанного на значении параметра "rings "?

1 Ответ

1 голос
/ 17 марта 2012

SOLR кэширует результат запросов. В этом случае набор результатов будет очень большим, даже если вы отфильтруете его и вернете только одну строку.

Прежде всего, SOLR нужна оперативная память. В конце концов, это индекс в оперативной памяти. Все, что делает SOLR быстрым, занимает оперативную память, поэтому, пожалуйста, не голодайте на сервере SOLR.

Во-вторых, ваш фактический запрос бесполезен. Нет смысла говорить «выбрать все записи из базы данных, создать индекс растрового изображения, а затем отфильтровать этот набор, чтобы выбрать только записи с определенными значениями полей. Если ваш запрос звучит так на естественном языке:

Records where XField is like so, AND YField is like that, AND ZField meets this condition

Тогда правильный способ сделать это в SOLR:

q=XField:so&fq=Yfield:that%20AND%20ZField:this

На самом деле, если вы уверены, что есть X записей с XField: so и 3x записей с YField: that и .07x записей с ZField: this, тогда начните с изменения порядка выражения AND и поместите ZField в q= часть.

Часть q= определяет набор результатов. После получения всех записей в наборе результатов SOLR затем применяет методы индексации растровых изображений для быстрой фильтрации (сужения) результатов с помощью операций над множествами. Поэтому, когда вы можете, сделайте так, чтобы часть q= возвращала меньше записей для fq= для работы.

...