объединить множественный поиск в одном лице - PullRequest
0 голосов
/ 17 июня 2011

У меня есть множество продуктов.Для каждого продукта я должен составить поисковый запрос с гранями.

Пример для следующих "продуктов":

Computer
TV
MP3-Player

с помощью поиска с использованием фасет. Мне нравится определять, как часто каждый продукт существует вполе ПРОДУКТ.Со следующим результатом

Comupter (3)
  -apple
  -ibm
  -dell
TV (5)
  -sony
  -toshiba
  [...]
MP3-player (10)
  -[...]

Прямо сейчас я понимаю, что используя один фасетный поиск для каждого слова / продукта.Это работает, но результаты возвращаются через 400 мс с использованием следующих параметров:

'facet' => 'true'
'facet.field' => 'PRODUCT'
'facet.method' => 'enum'
 'facet.limit'=>200
'facet.mincount'=>4
 'fq' => 'PRODUCT:computer'    <- by iterating an array with PHP i change the product (computer,tv,...) on every iteration

К сожалению, в реальной жизни нет 3 продуктов (как в примере выше), существует около 100 продуктов, которые актуальны,Это означает: PHP-скрипт должен запросить 100 solr-запросов с 400 мс - так что скрипт выполняется 40 секунд, что слишком долго.Я не могу запустить неограниченный / неограниченный многогранный поиск «всех» товаров (без «fq =»), потому что есть тысячи продуктов, и мне не нужна информация только для каждого.

Есть линапример, способ добиться лучшей производительности - объединить несколько запросов solr в один?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

Обычно вы не хотите фильтровать по определенному значению типа при огранке. Идея фасетирования заключается в том, что он будет выполнять «группу» и «подсчет» для всех значений в граненом поле (для всех элементов, соответствующих исходному запросу).

Если вы просто удалите свой fq-параметр, вы увидите, что взамен вы получите список всех значений в поле PRODUCT, которые встречаются не менее 4 раз, и счетчик для каждого из этих значений.

0 голосов
/ 17 июня 2011

Я не совсем понял, но разве вы не можете просто создать один фильтр-запрос для продуктов, которые имеют отношение к запросу:

facet' => 'true'
'facet.field' => 'PRODUCT'
'facet.method' => 'enum'
'facet.limit'=>200
'facet.mincount'=>4
'fq' => 'PRODUCT:(computer OR tv OR mp3-player)'

А затем выполнить некоторую обработку возвращенных результатов?

...