在弹性搜索中使用聚合时的多字段过滤器
Multiple field filter when using aggregation in elasticsearch
{
"query":{
"constant_score": {
"filter": {
"match":{
"request_1":"rent"
}
}
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}
这是我的查询,效果很好。
我想在里面 filter.match 我想添加另一个字段,以便在满足两个过滤器时返回的结果上发生聚合。
我正在尝试做类似的事情:
{
"query":{
"constant_score": {
"filter": {
"match":{
"request_1":"rent",
"request_2":"check"
}
}
}
}
}
按照建议我试过了
{
"query":{
"constant_score": {
"filter": [
{
"match":{
"request_1":"rent"
}
},
{
"match":{
"request_2":"check"
}
}
]
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}
输出错误:
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "unexpected token [START_ARRAY]",
"line": 4,
"col": 17
}
],
"type": "parsing_exception",
"reason": "unexpected token [START_ARRAY]",
"line": 4,
"col": 17
},
"status": 400
}
这样我就可以从那些在 request_1 字段中只有 "rent" 并且在 request_2 字段中只有 "check" 的人那里得到聚合。我怎样才能做到这一点?
你需要这样做:
{
"query": {
"bool": {
"filter": [
{
"match": {
"request_1": "rent"
}
},
{
"match": {
"request_2": "check"
}
}
]
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}
在非常旧的 ES 版本(2.0 之前)上,您可以改用此查询:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"match": {
"request_1": "rent"
}
},
{
"match": {
"request_2": "check"
}
}
]
}
}
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}
{
"query":{
"constant_score": {
"filter": {
"match":{
"request_1":"rent"
}
}
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}
这是我的查询,效果很好。
我想在里面 filter.match 我想添加另一个字段,以便在满足两个过滤器时返回的结果上发生聚合。
我正在尝试做类似的事情:
{
"query":{
"constant_score": {
"filter": {
"match":{
"request_1":"rent",
"request_2":"check"
}
}
}
}
}
按照建议我试过了
{
"query":{
"constant_score": {
"filter": [
{
"match":{
"request_1":"rent"
}
},
{
"match":{
"request_2":"check"
}
}
]
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}
输出错误:
{
"error": {
"root_cause": [
{
"type": "parsing_exception",
"reason": "unexpected token [START_ARRAY]",
"line": 4,
"col": 17
}
],
"type": "parsing_exception",
"reason": "unexpected token [START_ARRAY]",
"line": 4,
"col": 17
},
"status": 400
}
这样我就可以从那些在 request_1 字段中只有 "rent" 并且在 request_2 字段中只有 "check" 的人那里得到聚合。我怎样才能做到这一点?
你需要这样做:
{
"query": {
"bool": {
"filter": [
{
"match": {
"request_1": "rent"
}
},
{
"match": {
"request_2": "check"
}
}
]
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}
在非常旧的 ES 版本(2.0 之前)上,您可以改用此查询:
{
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"match": {
"request_1": "rent"
}
},
{
"match": {
"request_2": "check"
}
}
]
}
}
}
},
"aggs": {
"s": {
"terms": {
"field": "serial_number"
}
}
}
}