Сравнение двух запросов Solr - PullRequest
0 голосов
/ 13 октября 2011

Предположим, что сами по себе следующие:

  • q = foo возвращает два миллиона результатов
  • q = тип: SalesOrder возвращает 300 000 результатов
  • q = refId: 12345 возвращает 2000 результатов

Оператор по умолчанию - ИЛИ.

Если пользователи будут делать много запросов, как то, что я перечислю ниже:

А именно,

  • Запрос A: q = foo & fq = тип: SalesOrder & fq = refId: 12345

или

  • Запрос B: q = (foo AND тип: SalesOrder AND refId: 12345)

что бы я хотел использовать? Я знаю, что отдельные fq будут кэшироваться, но мне интересно, есть ли разница в том, что Solr будет делать в памяти, или что-то, о чем я могу не знать, когда Solr делает большие вычисления, подобные этому. В итоге результаты совпадают, но каковы плюсы и минусы каждого?

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Запрос A: q = foo & fq = type: SalesOrder & fq = refId: 12345

Если вы хотите ограничить количество результатов, как в фильтре, а не выполнять поиск по полям, следует использовать запросы фильтра.

fq - укажите необязательный запрос на фильтрацию.Результаты запроса ограничиваются поиском только тех результатов, которые возвращены запросом фильтра. Отфильтрованные запросы кэшируются Solr .Они очень полезны для повышения скорости сложных запросов.

Если в вашем случае, как вам кажется, вы хотите отфильтровать результаты, имеющие тип SalesOrder и refid 12345, запрос фильтра кажется правильным вместо использования их взапрос q парам.

0 голосов
/ 22 июля 2015

Запрос A: у вас есть первый набор результатов для "foo", который фильтруется

Запрос B: у вас есть три набора результатов, для которых вы вычисляете пересечение.

Так что если, например, "type: SalesOrder" дает огромный набор результатов, то queryA будет намного эффективнее.

Если запрос не является обычным текстом с анализаторами, но это, например, идентификатор (shop: 1234), наиболее эффективным будет использование в качестве запроса тот, который дает наименьший набор результатов (q = refId: 12345 может быть?) и использовать два других параметра в качестве фильтров

...