我努力让我的集合被限制到我的查询。 我当然尝试过:
{
"_source": ["burger.id", "burger.user_name", "burger.timestamp"],
"query": {
"query_string": {
"query": "burger.user_name:Bob"
}
},
"aggs": {
"burger_count": {
"cardinality": {
"field": "burger.id.keyword"
}
},
"min_dtm": {
"min": {
"field": "burger.timestamp"
}
},
"max_dtm": {
"max": {
"field": "burger.timestamp"
}
}
}
}
我很上使用“QUERY_STRING”设置用于过滤,因为我们有一个非常好的前端,使用户能够很容易地建立查询然后被变成了“QUERY_STRING。”
不幸的是,我还没有找到一个方法来组合使用QUERY_STRING和聚合,使聚合仅在查询的结果!
我已经通过的许多的SO关于这样的帖子阅读,但他们都是非常古老和过时的,因为他们都认为过滤查询的方式已过时,但即使不实现QUERY_STRING。
更新
以下是一些示例文档。 看来,我的结果不是由我的查询过滤。有没有设置,我很想念? 我也改变了所有的字段约为汉堡...
{
"_index": "burgers",
"_type": "burger",
"_id": "123",
"_score": 5.3759894,
"_source": {
"inference": {
"id": "1",
"user_name": "Jonathan",
"timestamp": 1541521691847
}
}
},
{
"_index": "burgers",
"_type": "burger",
"_id": "456",
"_score": 5.3759894,
"_source": {
"inference": {
"id": "2",
"user_name": "Ryan",
"timestamp": 1542416601153
}
}
},
{
"_index": "burgers",
"_type": "burger",
"_id": "789",
"_score": 5.3759894,
"_source": {
"inference": {
"id": "3",
"user_name": "Grant",
"timestamp": 1542237715511
}
}
}
答案 0 :(得分:0)
找到了我的答案!
看来此问题是由于查询burger.user_name
的 text 字段而不是查询{strong> keyword 字段burger.user_name.keyword
引起的。
将我的query_string更改为对每个文本字段使用关键字可以解决我的问题。
{
"_source": ["burger.id", "burger.user_name", "burger.timestamp"],
"query": {
"query_string": {
"query": "burger.user_name.keyword:Bob"
}
},
"aggs": {
"burger_count": {
"cardinality": {
"field": "burger.id.keyword"
}
},
"min_dtm": {
"min": {
"field": "burger.timestamp"
}
},
"max_dtm": {
"max": {
"field": "burger.timestamp"
}
}
}
}
This SO answer很好地解释了原因。