Filter with multiple price range and show facet

Viewed 36

I have to develop the multiple selection of price ranges. So I have to return the items filtered for the different price ranges and return the facet of the remaining ranges to make them selectable on the FE size

My problem is that the price is calculated by a payload function and putting the price ranges in OR, it doesn't allow me to exclude the tags in the facet

Here is the params

"params": {
    "q": "*:*",
    "fl": [
        "price:$price",
        "storePrice:$storePrice"
    ],
    "price": "payload(storesPrice,$store)",
    "storePrice": "payload(storesPrice,$store)",
    "store": "10131",
    "facet": "true",
    "fq": [
        "{!type=lucene df=stores v=$store}",
        "({!frange tag=rangePrice1 l=$minPrice1 u=$maxPrice1 v=$price}) OR ({!frange tag=rangePrice2 l=$minPrice2 u=$maxPrice2 v=$price})"
    ],
    "facet.query": [
        "{!frange key=priceRange_01__0_50 l=0 u=50 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_02__51_100 l=51 u=100 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_03__101_150 l=101 u=150 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_04__151_200 l=151 u=200 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_05__201_250 l=201 u=250 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_06__251_300 l=251 u=300 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_07__301_350 l=301 u=350 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_08__351_400 l=351 u=400 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_09__401_450 l=401 u=450 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_10__451_500 l=451 u=500 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_11__501_550 l=501 u=550 ex=rangePrice1,rangePrice2 v=$price}",
        "{!frange key=priceRange_12__551_10000 l=551 ex=rangePrice1,rangePrice2 v=$price}"
    ],
    "minPrice1": "51",
    "maxPrice1": "150",
    "minPrice2": "251",
    "maxPrice2": "400"
}

Here is the response

"response": {
        "numFound": 7220,
        "start": 0,
        "numFoundExact": true,
        "docs": [
            {
                "price": 135.0,
                "storePrice": 135.0
            },
            {
                "price": 145.0,
                "storePrice": 145.0
            },
            {
                "price": 85.0,
                "storePrice": 85.0
            },
            {
                "price": 130.0,
                "storePrice": 130.0
            },
            {
                "price": 125.0,
                "storePrice": 125.0
            },
            {
                "price": 125.0,
                "storePrice": 125.0
            },
            {
                "price": 150.0,
                "storePrice": 150.0
            },
            {
                "price": 125.0,
                "storePrice": 125.0
            },
            {
                "price": 135.0,
                "storePrice": 135.0
            },
            {
                "price": 135.0,
                "storePrice": 135.0
            }
        ]
    },
    "facet_counts": {
        "facet_queries": {
            "priceRange_01__0_50": 0,
            "priceRange_02__51_100": 1660,
            "priceRange_03__101_150": 4269,
            "priceRange_04__151_200": 0,
            "priceRange_05__201_250": 0,
            "priceRange_06__251_300": 774,
            "priceRange_07__301_350": 325,
            "priceRange_08__351_400": 192,
            "priceRange_09__401_450": 0,
            "priceRange_10__451_500": 0,
            "priceRange_11__501_550": 0,
            "priceRange_12__551_10000": 0
        },
        "facet_fields": {},
        "facet_ranges": {},
        "facet_intervals": {},
        "facet_heatmaps": {}
    }

So the items are filtered correctly in the response, but I have to show in the facets all other possible price ranges to make them selectable (so they don't have to be 0). This is possible using excludeFiltes but in this case it is not working.

My idea is that it is not possible to use a double tagging inside a single OR filter, and therefore the exclude in the facet is not working

Thanks for your help

0 Answers
Related