Статьи

Solr Result Grouping / Улучшения свертывания полей

Ранее я представлял Solr Result Grouping , также называемый Collapsing Field, который ограничивает количество документов, отображаемых для каждой «группы», обычно определяемых как уникальные значения в запросе поля или функции.

С тех пор было исправлено множество ошибок, улучшена производительность и улучшены функции. Вам потребуется недавняя ночная сборка Solr 4.0-dev или недавно выпущенная LucidWorks Enterprise v1.6, наша коммерческая версия Solr.

Улучшения функций

Одним из улучшений является возможность группировки по запросу через параметр group.query . Эта функциональность очень похожа на facet.query , за исключением того, что она получает верхние документы, которые соответствуют запросу, а не только счет. У этого есть много потенциальных применений, включая всегда получение лучших документов для определенных групп, или определение пользовательских групп, у которых есть диапазоны цен.

Еще одна полезная возможность — добавление параметра group.main . Если для этого параметра задано значение true, результаты первой команды группировки будут использоваться в качестве основного списка результатов в формате сглаженного ответа, который смогут обрабатывать устаревшие клиенты.

Например, формат сгруппированного ответа обычно возвращает высоко структурированные результаты в разделе «сгруппировано».
… & д = Solr + память и группа = верно и group.field = manu_exact

 "grouped":{
"manu_exact":{
"matches":6,
"groups":[{
"groupValue":"Apache Software Foundation",
"doclist":{"numFound":1,"start":0,"docs":[
{
"id":"SOLR1000",
"name":"Solr, the Enterprise Search Server",
"manu":"Apache Software Foundation"}]
}},
{
"groupValue":"Corsair Microsystems Inc.",
"doclist":{"numFound":2,"start":0,"docs":[
{
"id":"VS1GB400C3",
"name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
"manu":"Corsair Microsystems Inc."}]
}},
[...]

Если мы добавим
group.main = true к запросу, то получим гораздо более знакомый ответ (т. Е. Он выглядит как обычный не сгруппированный ответ):

… & q = solr + memory & group = true & group.field = manu_exact & group.main = правда

 "response":{"numFound":6,"start":0,"docs":[
{
"id":"SOLR1000",
"name":"Solr, the Enterprise Search Server",
"manu":"Apache Software Foundation"},
{
"id":"VS1GB400C3",
"name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
"manu":"Corsair Microsystems Inc."},

Можно также использовать параметр group.format = simple, чтобы выбрать этот упрощенный плоский ответ в обычном «сгруппированном» разделе ответа.

Другие недавние улучшения включают в себя поддержку отладки объяснения, выделения, огранки и возможность обрабатывать пропущенные значения в поле группировки, обрабатывая все документы без значения как находящегося в «нулевой» группе.

Улучшения производительности

Был достигнут ряд улучшений производительности, в том числе улучшена логика короткого замыкания … отключение документов низкого ранга в начале процесса. Эта важная оптимизация привела к увеличению скорости сжатия в определенных областях примерно в 9 раз!

Свертывание строковых полей было дополнительно оптимизировано с помощью специализированного кода, который работал со значениями ord вместо строковых значений. Это удвоило производительность еще раз!

Пожалуйста, обратитесь к Solr Wiki для дальнейшей документации по всем возможностям и параметрам группировки результатов.