在我们的一个新的项目,我们在这篇文章的启发http://project-a.github.io/on-site-search-design-patterns-for-e-commerce/#generic-faceted-search做我们的"facet"结构.虽然我已经在文章描述的范围内使用它,但是在选择方面时我遇到了让它工作的问题.我希望有人能给出一些可以尝试的提示,所以我不必再将所有聚合重做为单独的聚合计算.
问题基本上是我们使用单个聚合一次计算所有"方面",但是当我添加过滤器(fx.检查品牌名称)时,它会在返回聚合时"删除"所有其他品牌.我基本上想要的是它在计算其他方面时应该使用该品牌作为过滤器,但在计算品牌聚合时则不然.这是必要的,因此用户可以选择多个品牌.
看看https://www.contorion.de/search/Metabo_Fein/ou1-ou2?q=Winkelschleifer&c=bovy(这是上面文章中描述的网站),我选择了"Metabo"和"Fein"制造商( Hersteller),并展示了Hersteller菜单,它显示了所有制造商,而不仅仅是所选择的制造商.所以我知道它有可能以某种方式,我希望有一个关于如何编写聚合/过滤器的提示,所以我得到了"正确的电子商务方面行为".
在ES中的产品我有以下结构:(与原始文章相同,但在命名时使用"C#"ified)
"attributeStrings": [
    {
        "facetName": "Property",
        "facetValue": "Organic"
    },
    {
        "facetName": "Property",
        "facetValue": "Without parfume"
    },
    {
        "facetName": "Brand",
        "facetValue": "Adidas"
    }
]
所以上面的产品有2个属性/方面组 - 属性有2个值(有机,没有香水)和品牌有1个值(阿迪达斯).没有任何过滤器,我从以下查询计算聚合:
  "aggs": {
    "agg_attr_strings_filter": {
      "filter": {},
      "aggs": {
        "agg_attr_strings": {
          "nested": {
            "path": "attributeStrings"
          },
          "aggs": {
            "attr_name": {
              "terms": {
                "field": "attributeStrings.facetName"
              },
              "aggs": {
                "attr_value": {
                  "terms": {
                    "field": "attributeStrings.facetValue",
                    "size": 1000,
                    "order": [
                      {
                        "_term": "asc"
                      }
                    ]
   } } } } } …