Мы работаем с Solr 3.4 и имеем сравнительно небольшой индекс из 90 000 документов или около того. Эти документы разделены на несколько логических источников, поэтому каждый поиск будет иметь запрос фильтра для определенного источника, например:
?q=<query>&fq=source:<source>
где source
- классическое строковое поле. Мы используем edismax и имеем поле поиска по умолчанию text .
В настоящее время мы видим, что q=*
в среднем занимает в 20 раз больше времени, чем q=*:*
. Разница весьма заметна: *:*
занимает 100 мс, а *
- 3500 мс. Поиск по общему слову в наборе документов (соответствует почти 50% всех документов) даст результат менее чем за 200 мс.
Глядя на запросы с включенным debugQuery, мы видим, что *
анализируется до DisjunctionMaxQuery((text:*))
, а *:*
анализируется до MatchAllDocsQuery(*:*)
. Это имеет смысл, но я все еще не чувствую, что это объясняет замедление такого масштаба (замедление на 2000% по сравнению с тем, что соответствует 50% документов).
Что может быть причиной этого? Есть что-нибудь, что мы можем настроить?