Несколько фасетов на поле с Solr

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

Я пытаюсь разработать поисковую систему, которая больше похожа на поисковую систему Amazon (которая основана на их собственной поисковой системе A9 и поэтому, вероятно, похожа на Amazon CloudSearch).

Когда вы сужаетесь до некоторых «аспектов» поиска на Amazon, они продолжают показывать другие варианты вместе с подсчетами, если вы добавите эту область в свой поиск.

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

Например, я провел поиск в ювелирном отделе Amazon по запросу «кольцо с бриллиантом», а затем сузил поиск до «Золото» в качестве типа металла. Затем я смог выбрать несколько граней в каратах:

Пример огранки Amazon

Может ли кто-нибудь привести пример того, как я мог (эффективно) сделать это с Solr?

И есть ли в разработке какая-либо функция для будущей версии Solr, которая предлагала бы эту функциональность из коробки (при условии, что ее еще нет в коробке)?


person Mason G. Zhwiti    schedule 16.10.2012    source источник
comment
Этот ответ может помочь людям найти этот вопрос по названию.   -  person juan    schedule 28.08.2013


Ответы (2)


Tagging and excluding Filters функциональность в Solr может быть функцией, которую вы ищете, вот ссылка Wiki, объясняющая Multi Select Огранка.

Пример:: ../solr/select/?q=*&rows=0&facet=on&fq={!tag=krt}КАРАТ:10k_Gold&facet.field={!ex=krt}КАРАТ

Я думаю, эта функция присутствует с Solr 1.4.

person Compeete    schedule 16.10.2012
comment
+1 это было действительно полезно для меня. Не могли бы вы поделиться, как я могу сделать то же самое с SolrQuery в версии 1.4. Что-то вроде setFacetField()? - person manurajhada; 22.08.2013
comment
как мне пометить поле в случае множественного значения полевого и терминального запроса, используемого для запроса фильтра. мой запрос фильтра fq={!terms=country_facet}uk,germany. - person ranjan; 24.08.2017

Огранка с множественным выбором с новым JSON Facet API от Solr работает немного по-другому. Вы по-прежнему помечаете фильтры тем же способом, но используется другой синтаксис исключения.

&q="running shorts"
&fq={!tag=COLOR}color:(Blue Black)
&json.facet={
      sizes:{type:terms, field:size},
      colors:{type:terms, field:color, domain:{excludeTags:COLOR} },
      brands:{type:terms, field:brand, domain:{excludeTags:BRAND} }
}

Обратите внимание на tag=COLOR в фильтре, который выбирает элементы Blue или Black. Когда мы граним по цвету, мы хотим игнорировать (или исключать) фильтры с этим тегом, чтобы мы по-прежнему получали счетчики других цветов. Это то, что делает домен:{excludeTags:COLOR}.

Этот пример взят с сайта http://yonik.com/multi-select-faceting/.

person Yonik    schedule 25.11.2015