简体   繁体   English

Elasticsearch 我得到了特定价格范围内唯一可用的尺寸,Elasticsearch 返回所有值

[英]Elasticsearch i am getting the only size available in specific price range, Elasticsearch returns all values

I am creating a filters application for products, and i am using nodejs and elasticsearch for filtering products.我正在为产品创建一个过滤器应用程序,并且我正在使用nodejselasticsearch来过滤产品。 I have stuck on price range filter, it shows wrong options values.我坚持价格范围过滤器,它显示错误的选项值。 Here is mapping.这里是映射。

{
    "elasticsearch": {
        "default_mapping": {
            "properties": {
                "variants.option_values": {
                    "type": "text",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "completion": {
                            "type": "completion",
                            "analyzer": "standard"
                        }
                    }
                },
                "variants.price": {
                    "type": "float",
                    "fields": {
                        "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                        },
                        "text": {
                            "type": "text"
                        }
                    }
                }
            }
        }
    }
}

My Query我的查询

{
    "_source": [
        "variants.option_values",
        "variants.price"
    ],
    "query": {
        "bool": {
            "filter": {
                "range": {
                    "variants.price": {
                        "gte": 25000,
                        "lte": 30000
                    }
                }
            }
        }
    },
    "aggs": {
        "sizes": {
            "terms": {
                "field": "variants.option_values.keyword",
                "order": {
                    "_count": "desc"
                },
                "size": 750
            }
        }
    }
}

And Elasticsearch's Result和 Elasticsearch 的结果

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 4.8374715,
        "hits": [
            {
                "_index": "my-products",
                "_type": "products",
                "_id": "4680333656118",
                "_score": 4.8374715,
                "_ignored": [
                    "product_type.completion"
                ],
                "_source": {
                    "variants": [
                        {
                            "price": "30000.00",
                            "option_values": [
                                "Small"
                            ]
                        },
                        {
                            "price": "20000.00",
                            "option_values": [
                                "Medium"
                            ]
                        },
                        {
                            "price": "25000.00",
                            "option_values": [
                                "Large"
                            ]
                        }
                    ]
                }
            }
        ]
    },
    "aggregations": {
        "sizes": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": "Large",
                    "doc_count": 1
                },
                {
                    "key": "Medium",
                    "doc_count": 1
                },
                {
                    "key": "Small",
                    "doc_count": 1
                }
            ]
        }
    }
}

I am expecting an aggregations's buckets must have Size Large and Small .我期望聚合的存储桶必须具有 Size LargeSmall And must not include Medium .并且不得包含Medium Because Size Medium's price in less than the filtered price.(In other words size medium is not available in filtered price).因为中号中号的价格低于过滤后的价格。(换句话说,中号中号在过滤后的价格中不可用)。

Here is my mapping这是我的映射

"elasticsearch": {
    "default_mapping": {
      "properties": {
        "placement": {
          "type": "nested"
        },
        "collects": {
          "properties": {
            "collection_id": {
              "type": "long",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                },
                "text": {
                  "type": "text"
                }
              }
            },
            "id": {
              "type": "long",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                },
                "text": {
                  "type": "text"
                }
              }
            },
            "product_id": {
              "type": "long",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                },
                "text": {
                  "type": "text"
                }
              }
            }
          }
        },
        "variants.percent_sale": {
          "type": "float",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "text": {
              "type": "text"
            }
          }
        },
        "variants.option_values": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "variants.price": {
          "type": "float",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "text": {
              "type": "text"
            }
          }
        },
        "variants.compare_at_price": {
          "type": "float",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "text": {
              "type": "text"
            }
          }
        },
        "variants.weight": {
          "type": "float",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "text": {
              "type": "text"
            }
          }
        },
        "variants.sku": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "tags": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "vendor": {
          "type": "text",
          "analyzer": "keyword",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "product_type": {
          "type": "text",
          "analyzer": "keyword",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "title": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "options.values": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "articles.title": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        },
        "articles.tags": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            },
            "completion": {
              "type": "completion",
              "analyzer": "standard"
            }
          }
        }
      }
    }
  }
  1. Mapping issue: Resolved when i set variants as nested type映射问题:当我将变体设置为嵌套类型时解决
  2. inner_hits done the great job! inner_hits做得很好!

Here is results这是结果

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 0,
        "hits": [
            {
                "_index": "my-products",
                "_type": "products",
                "_id": "5012966080571",
                "_score": 0,
                "_source": {
                    "variants": [
                        {
                            "price": "30000.00"
                        },
                        {
                            "price": "20000.00"
                        },
                        {
                            "price": "25000.00"
                        }
                    ]
                },
                "inner_hits": {
                    "variants": {
                        "hits": {
                            "total": {
                                "value": 2,
                                "relation": "eq"
                            },
                            "max_score": null,
                            "hits": [
                                {
                                    "_index": "my-products",
                                    "_type": "products",
                                    "_id": "5012966080571",
                                    "_nested": {
                                        "field": "variants",
                                        "offset": 0
                                    },
                                    "_score": null,
                                    "_source": {
                                        "id": 34120727560251,
                                        "product_id": 5012966080571,
                                        "title": "Small",
                                        "price": "30000.00",
                                        "sku": "super-1101",
                                        "position": 1,
                                        "inventory_policy": "deny",
                                        "compare_at_price": "30500.00",
                                        "fulfillment_service": "manual",
                                        "inventory_management": "shopify",
                                        "option1": "Small",
                                        "option2": null,
                                        "option3": null,
                                        "created_at": "2020-08-11T11:09:29-04:00",
                                        "updated_at": "2020-08-11T11:09:49-04:00",
                                        "taxable": true,
                                        "barcode": "",
                                        "grams": 144,
                                        "image_id": null,
                                        "weight": 144,
                                        "weight_unit": "g",
                                        "inventory_item_id": 35675740274747,
                                        "inventory_quantity": 2,
                                        "old_inventory_quantity": 2,
                                        "requires_shipping": true,
                                        "admin_graphql_api_id": "gid://shopify/ProductVariant/34120727560251",
                                        "option_values": [
                                            "Small"
                                        ],
                                        "percent_sale": 1
                                    },
                                    "sort": [
                                        30000
                                    ]
                                },
                                {
                                    "_index": "my-products",
                                    "_type": "products",
                                    "_id": "5012966080571",
                                    "_nested": {
                                        "field": "variants",
                                        "offset": 2
                                    },
                                    "_score": null,
                                    "_source": {
                                        "id": 34120727625787,
                                        "product_id": 5012966080571,
                                        "title": "Large",
                                        "price": "25000.00",
                                        "sku": "super-1103",
                                        "position": 3,
                                        "inventory_policy": "deny",
                                        "compare_at_price": "25500.00",
                                        "fulfillment_service": "manual",
                                        "inventory_management": "shopify",
                                        "option1": "Large",
                                        "option2": null,
                                        "option3": null,
                                        "created_at": "2020-08-11T11:09:29-04:00",
                                        "updated_at": "2020-08-11T11:10:03-04:00",
                                        "taxable": true,
                                        "barcode": "",
                                        "grams": 144,
                                        "image_id": null,
                                        "weight": 144,
                                        "weight_unit": "g",
                                        "inventory_item_id": 35675740340283,
                                        "inventory_quantity": 4,
                                        "old_inventory_quantity": 4,
                                        "requires_shipping": true,
                                        "admin_graphql_api_id": "gid://shopify/ProductVariant/34120727625787",
                                        "option_values": [
                                            "Large"
                                        ],
                                        "percent_sale": 1
                                    },
                                    "sort": [
                                        25000
                                    ]
                                }
                            ]
                        }
                    }
                }
            }
        ]
    },
    "aggregations": {
        "variants_options": {
            "doc_count": 3,
            "inner": {
                "doc_count": 2,
                "sizes": {
                    "doc_count_error_upper_bound": 0,
                    "sum_other_doc_count": 0,
                    "buckets": [
                        {
                            "key": "Large",
                            "doc_count": 1
                        },
                        {
                            "key": "Small",
                            "doc_count": 1
                        }
                    ]
                }
            }
        }
    }
}

Thanks Gibbs谢谢吉布斯

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM