gpt4 book ai didi

elasticsearch - 在Elasticsearch中按条件获取一个文档

转载 作者:行者123 更新时间:2023-12-02 22:37:31 25 4
gpt4 key购买 nike

我有一个稍微复杂的ElasticSearch查询,它有5个条件,每个条件我需要1个文档,而且两个条件不能返回1个文档。

所以我尝试了两种不同的方法

首次多重搜寻

GET /products/_msearch
{}
{"query": {"function_score":{"query":{"bool":{"must":{ "match":
{"category":"1"}},"must_not":[{"ids":{"values":
["7DhlWxCY4oQyo8884AIS4Y","3fy0uSuMROSoCQueGA2uO4"]}}]}},
"random_score":{"seed":1376718000}}},"from":0,"size":1}
{}
{"query": {"function_score":{"query":{"bool":{"must":{ "match":
{"category":"2"}},"must_not":[{"ids":{"values":
["7DhlWxCY4oQyo8884AIS4Y","3fy0uSuMROSoCQueGA2uO4"]}}]}},
"random_score":{"seed":1376718000}}},"from":0,"size":1}

因此,我需要分别查询类别1和类别2中的1个产品,但是我需要过滤我已经购买的所有产品,并且该产品可以同时属于类别1和2,但是我不想从这两个类别中接收相同的产品查询。

但是我写的这个查询实际上可以从两个类别返回相同的产品。

我采取的第二种方法是尝试这样的普通搜索
GET /products/product/_search
{
"query": {
"bool": {
"must":{
"bool": {
"must":[
{ "match":{"category":"1"} } ,
{ "match":{"category":"2"} }
]
}
},
"must_not": [{
"ids": {
"values": [
"7DhlWxCY4oQyo8884AIS4Y",
"3fy0uSuMROSoCQueGA2uO4"
]
}
}]
}
}
}

但这当然只会返回两个类别的产品。

所以任何想法如何完成我的案子
  • 每个类别中都有一个独特的产品,但不包括已购买的产品

  • 根据 Val的评论,我想到了这个查询
    GET /products/product/_search
    {
    "aggs" : {
    "categories" : {
    "terms" : { "field" : "category" },
    "aggs": {
    "top": {
    "top_hits": {
    "size" : 1
    }
    }
    }
    }
    }
    }

    但这只会返回所有内容,所以我想我做错了什么,但是我刚开始使用ES,我不确定

    最佳答案

    试试这个:

    {
    "size": 0,
    "aggregations": {
    "myAgg": {
    "filters": {
    "filters": {
    "cat1": {
    "term": {
    "category": "1"
    }
    },
    "cat2": {
    "term": {
    "category": "2"
    }
    }
    }
    },
    "aggregations": {
    "top": {
    "top_hits": {
    "size": 1
    }
    }
    }
    }
    }
    }

    您将获得两个存储桶,每个类别一个,每个类别恰好一个命中。

    如果您想扩大每个类别的搜索范围,并且还希望按特定字段排除,请尝试以下操作:
    {
    "size": 0,
    "aggregations": {
    "myAgg": {
    "terms": {
    "field": "category"
    },
    "aggregations": {
    "bool_agg": {
    "filter": {
    "bool": {
    "must_not": {
    "terms": {
    "ids": [
    "7DhlWxCY4oQyo8884AIS4Y",
    "3fy0uSuMROSoCQueGA2uO4"
    ]
    }
    }
    }
    },
    "aggregations": {
    "top": {
    "top_hits": {
    "size": 1
    }
    }
    }
    }
    }
    }
    }
    }

    现在,您将获得每个类别的分类,并且在相关搜索中排名第一。

    关于elasticsearch - 在Elasticsearch中按条件获取一个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45327179/

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