以下查询产生结果:
GET /sentinel/pingback/_search
{
"match_all": {}
}
我想微调
query
以添加时间范围GET /sentinel/pingback/_search
{
"query": {
"range": {
"time": {
"gte": "now-20m"
}
},
"match_all": {}
}
}
这不再起作用,错误是
"error": {
"root_cause": [
{
"type": "parse_exception",
"reason": "failed to parse search source. expected field name but got [START_OBJECT]"
}
],
(...)
时间范围,但是,单独时正确工作
GET /sentinel/pingback/_search
{
"query": {
"range": {
"time": {
"gte": "now-20m"
}
}
}
}
因此,我期望对于一个
query
我可以添加独立的“微调”组件(例如,像range
),但是显然它不能以这种方式工作。如何结合这些查询约束?
注意:我知道我可以在上面的查询中摆脱
match_all
。我想保留它,因为它将是match_all
或match
(这是我希望添加到所有包含query
的另一个约束
最佳答案
您可以使用bool查询合并约束:
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html
但是我不明白为什么要将match_all与match查询结合使用。对我而言,这没有任何意义。
编辑:
如果要匹配每个文档或为一个特定值过滤一个字段值,则应使用javascript等编程语言来实现。
匹配将只匹配值,如名称所示。如果要查找完全匹配的内容,请查看术语查询(取决于您的ES版本以及<2.0的术语过滤器)。
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html
然后,如果未选择任何过滤器,则执行match_all,否则将查询json与术语query一起构建。如果您有多个约束,请使用bool查询将其合并。
对于几种编程语言,还有查询生成器库,
例如对于javascript(官方):
https://www.npmjs.com/package/elasticsearch
从逻辑的 Angular 来看,查询的工作原理与其他数据库基本相同,只是语法不同。
关于elasticsearch - 如何调整match_all查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38610382/