首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于左连接的弹性搜索

相当于左连接的弹性搜索
EN

Stack Overflow用户
提问于 2017-06-28 21:15:02
回答 1查看 473关注 0票数 1

我正在使用我们电子商务网站上的品牌过滤器。缩进行为是即使选择了任何品牌,仍然显示所有品牌,只有显示在所选品牌上的项目应该被过滤。

我的搜索结果:

代码语言:javascript
复制
"query": {
    "bool": {
        "must": {
            "match": {  
                "text": {
                    "query":"photo"
                }
            }
        },
        "filter": [
          {
            "term": { "brandName": "brodit" }
          }
        ]
    }
},
"aggs": { 
  "Brands": {
    "terms": {
      "field": "brandName"
    }
  }
}

我的意图和我得到的:

正如我所看到的,这是因为我基于过滤器限制了结果,并对过滤后的结果进行了聚合。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 21:21:41

更新:在执行聚合时,您可以指定要跨所有文档执行聚合。这可以通过将聚合的范围设置为使用Global Bucket来实现。以下是您的查询的修改版本。

代码语言:javascript
复制
"query": {
"bool": {
    "must": {
        "match": {  
            "text": {
                "query":"photo"
            }
        }
    },
    "filter": [
      {
        "term": { "brandName": "brodit" }
      }
    ]
  }
},
  "aggs": { 
    "Brands": {
      "global": {},
      "terms": {
        "field": "brandName"
    }
}

}

有关更多详细信息,请参阅Elasticsearch: Definitive Guide [2.x]文档的Global Bucket部分。

或者,您可以执行两个查询。一个不返回搜索结果的查询(通过设置size=0)来获取您的品牌聚合,以供您的过滤器选项显示。然后,当用户选择一个特定的品牌作为过滤依据时,您将需要执行一个单独的查询而不进行聚合,以便在搜索结果中仅显示属于该品牌的商品。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44803582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档