Понимание производительности запроса функции Solr - PullRequest
1 голос
/ 26 марта 2019

Я работаю с парсерами "edismax" и "function-query" в Solr, и мне сложно понять, имеет ли смысл время запроса, взятое с помощью "function-query".Запрос, который я пытаюсь оптимизировать, выглядит следующим образом:

q = {! Func sum ($ q1, $ q2, $ q3)}, где q1, q2, q3 - запросы edismax.

QTime, возвращаемый запросами edismax, занимает менее 50 мс, но кажется, что запрос-функция - это шаг определения скорости, поскольку приведенный выше комбинированный запрос занимает около 200-300 мс.Я также проанализировал производительность функционального запроса, используя только константы.

Результаты QTime для различных q следующие:

  • 097ms для q = {! Func} sum (10,20)

  • 109 мс для q = {! Func} sum (10,20,30)

  • 127 мс для q = {!func} sum (10,20,30,40)

  • 145ms для q = {! func} sum (10,20,30,40,50)

Имеет ли эта тенденция смысл?Ожидается ли, что функциональные запросы будут такими медленными?

Что делает запросы edismax намного быстрее?

Что я могу сделать, чтобы мой исходный запрос (который имеет подзапросы edismax q1, q2, q3) работал под 100 мс?

1 Ответ

0 голосов
/ 09 апреля 2019
Запрос

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

q=+{!v=$q1} +{!v=$q2} +{!v=$q3} {!func sum($q1,$q2,$q3)}
...