【问题标题】:How to do Tagging and excluding Filters in ElasticSearch?如何在 ElasticSearch 中标记和排除过滤器?
【发布时间】:2016-03-04 03:49:17
【问题描述】:

就像当过滤器设置为分面/聚合过滤器时,它应该被排除,所以我们不会只得到一个结果。

如果用户选择了某个品牌,结果应该只有选择的品牌,但聚合应该返回所有已经存在的品牌过滤器,以便用户也可以选择其他品牌。

我们如何在 Elasticsearch 中做到这一点?同样可以在 solr 中使用标记和排除过滤器访问

【问题讨论】:

    标签: php elasticsearch solr lucene bigdata


    【解决方案1】:

    使用 post_filter 过滤搜索结果,但仍显示聚合中的所有数据。

    见Post Filter:

    post_filter 应用于搜索结果末尾的搜索结果 搜索请求,在已经计算聚合之后。它的 目的最好用例子来说明:

    curl -XGET localhost:9200/shirts/_search -d '
    {
      "query": {
        "filtered": {
          "filter": {
            { "term": { "brand": "gucci" }} 
          }
        }
      },
      "aggs": {
        "colors": {
          "terms": { "field": "color" }, 
        },
        "color_red": {
          "filter": {
            "term": { "color": "red" } 
          },
          "aggs": {
            "models": {
              "terms": { "field": "model" } 
            }
          }
        }
      },
      "post_filter": { 
        "term": { "color": "red" },
      }
    }
    '
    

    【讨论】:

    • 如何检查用户是否选择了两种颜色?比如“color_red”:我将如何创建另一个?使用 or 运算符。如果是,请给出 json
    • 使用 OR 过滤器添加额外的过滤器 - elastic.co/guide/en/elasticsearch/reference/1.4/…
    • 是的。我明白了。谢谢。 :)
    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2020-09-13
    相关资源
    最近更新 更多