meilisearch-js-plugins icon indicating copy to clipboard operation
meilisearch-js-plugins copied to clipboard

Facet Distribution count jumping around between distinct value and non-distinct value

Open pipech opened this issue 11 months ago • 2 comments

Not sure if this the right place for this bug, there are many layer of abstraction on this component.

Context I'm building a e-commerce site, the data I sent to Meilisearch is on SKUs level then I set productId as distinct value on Meilisearch.

The actual total product count is 18, and 105 for total skus.

Description / Current behavior Facet Distribution count jumping around between count of Product and SKUs on select. Notice how Roast Level: Medium count change from 7 to 41 when I select Roast Level: Dark.

Expected behavior I can set Facet Distribution count to count of the productId which was set as distinct value. From this example I would like Roast Level: Medium count to remain 6 on selection of Roast Level: Dark.

Screenshots

product_media_ordering

Network Request

Response (I cut some irrelevant part off.)

{
  "results": [
      {
          "indexUid": "products",
          "hits": [
              "..."
          ],
          "query": "",
          "processingTimeMs": 9,
          "limit": 21,
          "offset": 0,
          "estimatedTotalHits": 6,
          "facetDistribution": {
              "categoryHierarchy.lvl0": {
                  "coffees": 6
              },
              "categoryHierarchy.lvl1": {
                  "coffees > roasted-beans": 6
              },
              "productAttributeDict.Roast Level": {
                  "Medium": 6
              },
              "productAttributeDict.Type": {
                  "Blends": 1,
                  "Single Origin": 5
              }
          },
          "facetStats": {
              "variantSku.promoPrice": {
                  "min": 359.0,
                  "max": 660.0
              },
              "variantSku.variantDisplay.Bag Size.meta.unitData.value": {
                  "min": 200.0,
                  "max": 340.0
              }
          }
      },
      {
          "indexUid": "products",
          "hits": [
              "..."
          ],
          "query": "",
          "processingTimeMs": 3,
          "limit": 1,
          "offset": 0,
          "estimatedTotalHits": 41,
          "facetDistribution": {
              "categoryHierarchy.lvl0": {
                  "coffees": 41
              },
              "categoryHierarchy.lvl1": {
                  "coffees > roasted-beans": 41
              }
          },
          "facetStats": {}
      },
      {
          "indexUid": "products",
          "hits": [
              "..."
          ],
          "query": "",
          "processingTimeMs": 2,
          "limit": 1,
          "offset": 0,
          "estimatedTotalHits": 105,
          "facetDistribution": {
              "productAttributeDict.Roast Level": {
                  "Dark": 30,
                  "Light": 18,
                  "Light-Medium": 16,
                  "Medium": 41
              }
          },
          "facetStats": {}
      },
      {
          "indexUid": "products",
          "hits": [
              "..."
          ],
          "query": "",
          "processingTimeMs": 2,
          "limit": 1,
          "offset": 0,
          "estimatedTotalHits": 41,
          "facetDistribution": {
              "categoryHierarchy.lvl0": {
                  "coffees": 41
              }
          },
          "facetStats": {}
      }
  ]
}

Request

{
  "queries": [
      {
          "indexUid": "products",
          "q": "",
          "facets": [
              "categoryHierarchy.lvl0",
              "categoryHierarchy.lvl1",
              "categoryHierarchy.lvl2",
              "productAttributeDict.Coffee Altitude",
              "productAttributeDict.Coffee Origin",
              "productAttributeDict.Coffee Process",
              "productAttributeDict.Coffee Species",
              "productAttributeDict.Coffee Variety",
              "productAttributeDict.Roast Level",
              "productAttributeDict.Taste Notes (SCA)",
              "productAttributeDict.Type",
              "shopDetail.shopSlug",
              "variantSku.promoPrice",
              "variantSku.variantDisplay.Bag Size.meta.unitData.value",
              "variantSku.variantDisplay.Grind Preference.meta.booleanText.value"
          ],
          "filter": [
              [
                  "\"productAttributeDict.Roast Level\"=\"Medium\""
              ],
              [
                  "\"categoryHierarchy.lvl1\"=\"coffees > roasted-beans\""
              ]
          ],
          "attributesToHighlight": [
              "*"
          ],
          "highlightPreTag": "__ais-highlight__",
          "highlightPostTag": "__/ais-highlight__",
          "limit": 21,
          "offset": 0,
          "distinct": "productId"
      },
      {
          "indexUid": "products",
          "q": "",
          "facets": [
              "categoryHierarchy.lvl0",
              "categoryHierarchy.lvl1"
          ],
          "filter": [
              [
                  "\"productAttributeDict.Roast Level\"=\"Medium\""
              ],
              [
                  "\"categoryHierarchy.lvl0\"=\"coffees\""
              ]
          ],
          "attributesToHighlight": [
              "*"
          ],
          "highlightPreTag": "__ais-highlight__",
          "highlightPostTag": "__/ais-highlight__",
          "limit": 1,
          "offset": 0,
          "distinct": "productId"
      },
      {
          "indexUid": "products",
          "q": "",
          "facets": [
              "productAttributeDict.Roast Level"
          ],
          "filter": [
              [
                  "\"categoryHierarchy.lvl1\"=\"coffees > roasted-beans\""
              ]
          ],
          "attributesToHighlight": [
              "*"
          ],
          "highlightPreTag": "__ais-highlight__",
          "highlightPostTag": "__/ais-highlight__",
          "limit": 1,
          "offset": 0,
          "distinct": "productId"
      },
      {
          "indexUid": "products",
          "q": "",
          "facets": [
              "categoryHierarchy.lvl0"
          ],
          "filter": [
              [
                  "\"productAttributeDict.Roast Level\"=\"Medium\""
              ]
          ],
          "attributesToHighlight": [
              "*"
          ],
          "highlightPreTag": "__ais-highlight__",
          "highlightPostTag": "__/ais-highlight__",
          "limit": 1,
          "offset": 0,
          "distinct": "productId"
      }
  ]
}

Environment

  • "@meilisearch/instant-meilisearch": "0.23.0"
  • "instantsearch.js": "4.75.6"
  • "meilisearch": "^0.47.0"
  • "react-instantsearch": "^7.13.9"
  • "react-instantsearch-nextjs": "^0.3.20"

Please let me know if you need any further information.

pipech avatar Jan 07 '25 03:01 pipech

Thanks for opening this issue. This rings a bell, but I haven't looked at facets for a while. I need to investigate whether or not it's related to the behavior mentioned in this discussion.

Strift avatar Jan 08 '25 09:01 Strift

Switch to use Algolia as source, everything seems to works perfectly with afterdistinct settings.

So the problems seems to be somewhere on @meilisearch/instant-meilisearch or meilisearch.

pipech avatar Jan 13 '25 04:01 pipech