2012-10-18 2 views
8

Я потратил несколько часов на то, чтобы найти решение моей проблемы. Я видел, как люди задают вопросы, близкие к тем, что я пытаюсь выполнить, но пока никто не задает один и тот же вопрос. Позвольте мне посмотреть, могу ли я объяснить это адекватно:Отфильтруйте нерелевантные грани из результатов Solr

Скажите, что я обувной магазин. На моем веб-сайте у меня три страницы: одна для мужской обуви, одна для женской обуви и одна для детской обуви. Скажем, моя таблица обуви имеет поле prod_group. Итак, для мужской страницы запрос будет q = prod_group: men. Теперь, скажем, один из аспектов, которые я хочу предоставить, - это бренд. q = prod_group: men & filter.field = brand

Проблема, с которой я столкнулась, - это результаты фасета, показывающие все бренды в моей базе данных, а не только марки, относящиеся к мужской обуви. Другими словами, я уже знаю, что в линии «Мой маленький пони» есть нулевая мужская обувь. Я не хочу показывать My Little Pony в аспекте бренда. Установка facet.mincount - это не то, что мне нужно. Если я запустил запрос q = prod_group: men & fq = color: red & filter.field = бренд, клиент хочет показать потребителю, что у бренда «Mighty Joe» нет красных туфель, поэтому мне все еще нужны грани с число фаций 0.

В принципе, на что я надеюсь, это результаты фасетов, основанные на результатах базового запроса. Пока единственный способ, которым я это вижу, - запустить два запроса: сначала с базовым запросом и установкой facet.mincount = 1, чтобы получить список соответствующих граней, а затем фактический запрос с facet.mincount обратно в 0, так что Я могу выяснить, когда седеть некоторые варианты, которые больше не доступны на основе уже сделанных фасет.

Выполнение двух запросов кажется несколько менее элегантным. facet.pivot может помочь в долгосрочной перспективе, но мы все еще используем 3.x, и я не вижу, чтобы это изменилось в ближайшее время. Я пропустил какой-либо запрос/схему/параметр конфигурации, который будет делать то, что мне нужно, с одним запросом?

ответ

0

Вы просмотрели вариант facet.query. Из описания кажется, что он выполнит то, что вам нужно.

Этот параметр позволяет указать произвольный запрос в синтаксисе по умолчанию Lucene для генерации счетчика фасетов. По умолчанию фасет возвращает количество уникальных терминов для «поля», а facet.query позволяет определить количество отсчетов для произвольных терминов или выражений.

2

Вы можете проверить один вариант: Facet Excluding Filters, который позволит вам возвращать грани, независимо от применяемого фильтра.

например.
вы фильтруете на мужчин fq=prod_group:men с facet.mincount 1, который вернет все грани граней, применимые к этому фильтру.
Затем, когда вы используете субфильтр на некотором цвете fq=color:red, вы можете получить две грани назад с результатами и один без фильтра с использованием исключающих фильтров
например. fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand

Это даст вам как грани с фильтром, так и без него, с помощью которого вы можете использовать серые оттенки на стороне клиента. Немного накладных расходов на стороне клиента, но вам просто нужно выполнить один запрос.

0
fq=prod_group:men 

делает фильтрацию, применимые к результатам фасеточных тоже, что не в случае с q параметрами.

Смежные вопросы