gpt4 book ai didi

elasticsearch - 不得查询elasticsearch

转载 作者:行者123 更新时间:2023-12-03 01:54:05 25 4
gpt4 key购买 nike

我有我的要求:

{
"size": 10,
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{"term": {"event": "matchmaking_done"}}
]
}
},
"filter": {
"range": {
"@timestamp": {
"gt" : "2016-06-01T00:00:00.000Z",
"lte" : "2016-06-01T00:05:00.000Z"
}
}
}
}
},
"aggs" : {
"user-ids" : {
"terms" : { "field" : "user_id",
"size": 0
}
}
}
}

我需要添加到此请求参数中-不包含 pvp_league字段!我尝试添加 must_not,但不明白如何正确执行此操作。
请帮忙!

最佳答案

您可以自己回答,但是ES 2.x的方法是不使用filtered查询,因​​为它已被弃用,并将在ES 5.0中删除。 ES 2.x引入了“过滤器”上下文的概念,而不是每个查询都只是一个查询或一个过滤器。现在,每个查询都是过滤器或查询(计分的),仅取决于其使用的上下文。

对于您的查询,由于简化了bool / filter语法,因此这变得更加简单:

{  
"size":10,
"query":{
"bool":{
"must":[
{
"term":{
"event":"matchmaking_done"
}
}
],
"must_not":[
{
"exists":{
"field":"pvp_league"
}
}
],
"filter":[
{
"range":{
"@timestamp":{
"gt":"2016-06-01T00:00:00.000Z",
"lte":"2016-06-01T00:05:00.000Z"
}
}
}
]
}
},
"aggs":{
"user-ids":{
"terms":{
"field":"user_id",
"size":0
}
}
}
}

作为一个很大的方面,为 "size" : 0聚合指定 terms,您正在请求所有唯一术语,直到 INT_MAX为止。那不是可伸缩的请求(与10个user_id甚至100个(但不是10000个)用户一起使用时效果很好)。

顺便说一句,您的请求根本不需要查询上下文,因为它的搜索方面根本不关心相关性。您的字词查询( "event" : "matchmaking_done")匹配或不匹配。因为您希望它匹配或不匹配,但是您实际上并不关心顺序,所以应该在过滤器上下文中使用它。这会将请求更改为:
{  
"size": 10,
"query": {
"bool": {
"must_not": [
{
"exists": {
"field": "pvp_league"
}
}
],
"filter":[
{
"range": {
"@timestamp": {
"gt":"2016-06-01T00:00:00.000Z",
"lte":"2016-06-01T00:05:00.000Z"
}
}
},
{
"term": {
"event": "matchmaking_done"
}
}
]
}
},
"aggs": {
"user-ids": {
"terms": {
"field": "user_id",
"size": 0
}
}
}
}

关于elasticsearch - 不得查询elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37970765/

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