elasticsearch - 如何调整match_all查询?

标签 elasticsearch

以下查询产生结果:

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_allmatch(这是我希望添加到所有包含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/

相关文章:

elasticsearch - Elasticsearch按以下类别分组

elasticsearch - Elasticsearch将长序列字符串与模糊查询进行比较

elasticsearch - Elasticsearch-搜索通配符(包含字符串)和tf-idf分数

sorting - Elasticsearch 中的聚合和排序

database - 修复一个简单的 Elasticsearch 查询

elasticsearch - aiohttp 仅下载正文的前 n 个字节

elasticsearch - Ruby:ElasticSearch:升级Chewy/ElasticSearch版本时出错

elasticsearch - 如何对 Elasticsearch 5.3 查询请求进行统计?

elasticsearch - 更新Elasticsearch中的嵌套对象

java - 当我在 Elasticsearch 2.2 中恢复并同时索引更多文档时,ES 的行为如何?