elasticsearch,lucene,elastic-stack,facet,Python,elasticsearch,Lucene,Elastic Stack,Facet" /> elasticsearch,lucene,elastic-stack,facet,Python,elasticsearch,Lucene,Elastic Stack,Facet" />

Python facets并基于facets进行一些过滤

Python facets并基于facets进行一些过滤,python,elasticsearch,lucene,elastic-stack,facet,Python,elasticsearch,Lucene,Elastic Stack,Facet,我有一个关于facet和基于facet进行过滤的问题。 我知道这是一个重复的问题,但我找不到答案 我想知道如何在弹性搜索中实现相同的功能 让我们假设我有一个关于汽车和一些方面的索引-例如模型和 颜色 颜色 []红色10 []蓝色5 []绿色2 模型 []宝马4 []大众5 []福特8 如果我选择一个模型,我只想得到该模型的颜色面, 但我仍然希望得到所有模型的切面。例如: 颜色 []红色2 []蓝色2 []绿色1 模型 []宝马4 [x] 大众5 []福特8 我已经搜索过了,但没有找到关于这个用例

我有一个关于facet和基于facet进行过滤的问题。 我知道这是一个重复的问题,但我找不到答案

我想知道如何在弹性搜索中实现相同的功能

让我们假设我有一个关于汽车和一些方面的索引-例如模型和 颜色

颜色

[]红色10

[]蓝色5

[]绿色2

模型

[]宝马4

[]大众5

[]福特8

如果我选择一个模型,我只想得到该模型的颜色面, 但我仍然希望得到所有模型的切面。例如:

颜色

[]红色2

[]蓝色2

[]绿色1

模型

[]宝马4

[x] 大众5

[]福特8

我已经搜索过了,但没有找到关于这个用例的示例。这是吗 可能,如果是,如何筛选查询以获得这些结果


向您致以亲切的问候

我相信这一点在这里得到了多次回答,但让我们以您的具体例子为例

创建索引

PUT lalit
{
  "mappings": {
    "properties": {
      "model": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      },
      "color": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}
吞下一些医生

POST lalit/_doc
{"color":"red","model":"bmw"}
POST lalit/_doc
{"color":"blue","model":"bmw"}
POST lalit/_doc
{"color":"red","model":"vw"}
POST lalit/_doc
{"color":"green","model":"vw"}
POST lalit/_doc
{"color":"blue","model":"ford"} 
应用a+a组合

屈服

"aggregations" : {
    "model_filtered_colors" : {
      "doc_count" : 2,
      "actual_aggs" : {
        "doc_count_error_upper_bound" : 0,
        "sum_other_doc_count" : 0,
        "buckets" : [
          {
            "key" : "green",
            "doc_count" : 1
          },
          {
            "key" : "red",
            "doc_count" : 1
          }
        ]
      }
    },
    "all_models" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "bmw",
          "doc_count" : 2
        },
        {
          "key" : "vw",
          "doc_count" : 2
        },
        {
          "key" : "ford",
          "doc_count" : 1
        }
      ]
    },
    "all_colors" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "blue",
          "doc_count" : 2
        },
        {
          "key" : "red",
          "doc_count" : 2
        },
        {
          "key" : "green",
          "doc_count" : 1
        }
      ]
    }
  }

model_filtered_colors按颜色为您提供所有vw,而其他2个聚合则为您提供不带vw过滤器的全面总计。

您的答案很好,但我需要一个功能lilke amazon facets a doing,如果我应用过滤器facet bucket。然后所选的bucket不会改变,但所有bucket都是其他的。同样,如果我从不同的bucket应用另一个过滤器,那么所选的bucket不会改变,但都是其他的。我读过关于post_过滤器和全局聚合的文章,但它们并没有像amazon或ebayYou那样更新facte,只需使用上面显示的2种agg类型,您就可以完成所有这些。再研究一下:
"aggregations" : {
    "model_filtered_colors" : {
      "doc_count" : 2,
      "actual_aggs" : {
        "doc_count_error_upper_bound" : 0,
        "sum_other_doc_count" : 0,
        "buckets" : [
          {
            "key" : "green",
            "doc_count" : 1
          },
          {
            "key" : "red",
            "doc_count" : 1
          }
        ]
      }
    },
    "all_models" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "bmw",
          "doc_count" : 2
        },
        {
          "key" : "vw",
          "doc_count" : 2
        },
        {
          "key" : "ford",
          "doc_count" : 1
        }
      ]
    },
    "all_colors" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "blue",
          "doc_count" : 2
        },
        {
          "key" : "red",
          "doc_count" : 2
        },
        {
          "key" : "green",
          "doc_count" : 1
        }
      ]
    }
  }