gpt4 book ai didi

elasticsearch - 计算给定结果集上查询的文档数

转载 作者:行者123 更新时间:2023-12-02 22:29:40 24 4
gpt4 key购买 nike

可以说我有4个查询:A,B,C,D。
我要针对查询A的给定结果集计算每个其他查询与该结果集的交集计数。

基本上我想统计A AND BA AND CA AND D,但是我不想每次都重新计算A
我正在使用ES v2.4

示例-假设我有一个具有以下映射的索引

{
"mappings": {
"doc": {
"properties": {
"type": {
"type": "string"
},
"gender": {
"type": "string"
},
"color": {
"type": "string"
},
"material": {
"type": "string"
}
}
}
}
}

我的 A查询匹配的是 Shirt类型的所有项目,因此:
{
"query": {
"match": {
"type": "Shirt"
}
}
}

现在从该结果集中(“所有类型为衬衫的项目”)我想获得也为“蓝色”或“男性”的数字
我可以通过创建单独的查询来做到这一点:
{
"query": {
"bool": {
"must": [
{
"match": {
"type": "Shirt"
}
},
{
"match": {
"color": "Blue"
}
}
]
}
}
}


{
"query": {
"bool": {
"must": [
{
"match": {
"type": "Shirt"
}
},
{
"match": {
"gender": "Male"
}
}
]
}
}
}

但这会导致我真的想避免的每个查询上搜索 type: "Shirt"

更新:我找到了我想要的东西-“过滤器”聚合-因此我可以构建以下查询:
{
"query": {
"match": {
"type": "Shirt"
}
},
"aggs": {
"gender_male": {
"filter": {
"match": {
"gender": "Male"
}
}
},
"color_blue": {
"filter": {
"match": {
"color": "Blue"
}
}
}
}
}

最佳答案

试试这个。将您的4个查询定义为aggs并立即获取。

GET test/shirts/_search
{
"query": {
"bool": {
"filter": {
"type": {
"value": "shirts"
}
}
}
},
"aggs": {
"count_by_color": {
"terms": {
"field": "color",
"size": 100
}
},
"count_by_gender":{
"terms": {
"field": "gender",
"size": 100
}
},
"count_by_material":{
"terms": {
"field": "material",
"size": 100
}
},
"count_by_gender_color":{
"terms": {
"field": "gender",
"size": 100
},
"aggs": {
"color": {
"terms": {
"field": "color",
"size": 100
}
}
}
}
}
}

关于elasticsearch - 计算给定结果集上查询的文档数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46272207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com