Thiết kế cấu trúc dữ liệu chức năng search, filter, sort cho trang thương mại điện tử

Chào mn,
như tiêu đề thì em đang làm project về mảng này và đang mắc chưa biết xử lý sao, lên đây hỏi han xem có giải quyết được gì không ạ.
Có ai có đề xuất gì không ạ, cho em xin chút ý kiến
Hệ thống bên em giống như tiki có lọc theo giá, thuộc tính, và search nữa.
Mong tìm được hướng giải quyết.
Cám ơn mn

update -------------------------------

{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "variants.string_filter",
            "query": {
              "bool": {
                "filter": [
                  {
                    "term": {
                      "variants.string_filter.filter_name": "ram"
                    }
                  },
                  {
                    "terms": {
                      "variants.string_filter.filter_value": [
                        "1"
                      ]
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

đây là đoạn query mình dùng, mình thiết kết cấu trúc theo dạng FACET

   {
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0,
    "hits": [
      {
        "_index": "app",
        "_type": "page",
        "_id": "1",
        "_score": 0,
        "_source": {
          "product_id": 1,
          "full_text": "text 1",
          "full_text_boosted": "boosted 1",
          "variants": [
            {
              "variant_id": 1,
              "string_filter": [
                {
                  "filter_name": "weight",
                  "filter_value": "100"
                },
                {
                  "filter_name": "ram",
                  "filter_value": "1"
                },
                {
                  "filter_name": "cpu",
                  "filter_value": "1"
                }
              ],
              "integer_filter": {
                "integer_name": "final_gross_price",
                "integer_value": 5001
              }
            },
            {
              "variant_id": 1403003751,
              "string_filter": [
                {
                  "filter_name": "weight",
                  "filter_value": "200"
                },
                {
                  "filter_name": "ram",
                  "filter_value": "1308942637"
                },
                {
                  "filter_name": "cpu",
                  "filter_value": "1325432371"
                }
              ],
              "integer_filter": {
                "integer_name": "final_gross_price",
                "integer_value": 1868949491
              }
            }
          ]
        }
      }
    ]
  }
}

đây là kết quả ạ,

giờ nó đang có vấn đề là mình muốn lấy 1 variant ra thôi, nhưng mà nó lại lấy tất cả. @@

Thấy bạn gắn tag elasticsearch, không biết bạn tìm hiểu elasticseach chưa??

mình đang tìm hiểu để làm ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?