2012-10-18 6 views
8

Spędziłem wiele godzin, szukając rozwiązania mojego problemu. Widziałem ludzi, którzy zadają pytania bliskie temu, co próbuję osiągnąć, ale jak dotąd nikt nie zadaje tego samego pytania. Pozwól mi zobaczyć, czy mogę to wyjaśnić odpowiednio:Filtrowanie nieistotnych aspektów z wyników Solr

Powiedz, że jestem sklep obuwniczy. Na mojej stronie mam trzy strony: jedną dla męskich butów, jedną dla kobiet i jedną dla dziecięcych. Powiedzmy, że mój stół do butów ma pole prod_group. Tak więc dla strony mężczyzn zapytanie to q = prod_group: men. Teraz powiedzmy, że jednym z aspektów, które chcę zapewnić, jest marka. q = prod_group: men & filter.field = marka

Kwestia, którą mam, to wyniki aspektu pokazujące wszystkie marki w mojej bazie danych, a nie tylko marki odnoszące się do obuwia męskiego. Innymi słowy, już wiem, że w linii "My Little Pony" jest zero męskich butów. Nie chcę wyświetlać My Little Pony w aspekcie marki. Ustawienie aspektu.mincount również nie jest tym, czego potrzebuję. Jeśli uruchomię kwerendę q = prod_group: men & fq = color: red & filter.field = brand, klient chce pokazać konsumentowi, że marka "Mighty Joe" nie ma żadnych czerwonych butów, więc nadal potrzebuję faset z liczba aspektów wynosi 0.

Zasadniczo mam nadzieję, że wyniki fasetowania będą oparte na wynikach zapytania podstawowego. Jak dotąd jedynym sposobem, w jaki to widzę, jest wykonanie dwóch zapytań: pierwszy z samym zapytaniem podstawowym i ustawieniem facet.mincount = 1, aby uzyskać listę odpowiednich aspektów, a następnie faktyczne zapytanie z facet.mincount z powrotem do 0, więc Mogę wymyślić, kiedy wyszarzyć pewne opcje, które nie są już dostępne w oparciu o już wybrane opcje aspektu.

Uruchomienie dwóch zapytań wydaje się nieco mniej niż eleganckie. facet.pivot może pomóc na dłuższą metę, ale wciąż używamy wersji 3.x i nie widzę, żeby to się wkrótce zmieniło. Czy przeoczyłem opcję zapytania/schematu/konfiguracji, która zrobi to, czego potrzebuję w jednym zapytaniu?

Odpowiedz

0

Czy obejrzałeś opcję facet.query. Z opisu brzmi, jakby to się stało, czego potrzebujesz.

Ten parametr pozwala określić dowolne zapytanie w domyślnej składni Lucene, aby wygenerować liczbę aspektów. Domyślnie faceting zwraca liczbę unikalnych warunków dla "pola", podczas gdy facet.query pozwala na określenie liczby dla dowolnych terminów lub wyrażeń.

2

Możesz sprawdzić jedną opcję o nazwie Facet Excluding Filters, która pozwoli Ci zwrócić fasetę niezależnie od zastosowanego filtru.

np.
filtrujesz mężczyzn fq=prod_group:men z facet.mincount 1, który zwróci wszystkie aspekty marki mające zastosowanie do tego filtra.
Następnie, gdy filtr podrzędny w pewnym kolorze fq=color:red można uzyskać dwa aspekty z powrotem jeden z wynikami i jeden bez filtra przy użyciu filtrów wykluczających
np. fq={!tag=dt}color:red&facet.field={!ex=dt key=nonfilter_brand}brand&facet.field=brand

Zapewni to zarówno fasety z filtrem, jak i bez niego, za pomocą których można wyrównać różnice po stronie klienta. Trochę narzutów po stronie klienta, ale wystarczy wykonać jedno zapytanie.

0
fq=prod_group:men 

sprawia, że ​​zastosowanie do filtrowania wyników facet też, co nie jest w przypadku q parametrów.