当前位置: 首页 > 知识库问答 >
问题:

如何组合查询以节省访问ElasticSearch的次数?

杨昆
2023-03-14

我有两个查询要执行:

1)我想知道弗兰克的生日。(人名是文件的id)。

2)弗兰克的老板是鲍勃。我需要知道有多少人(包括弗兰克)以鲍勃为老板。

我正在做的第一件事是:

GET /myindex/_search
{
  "_source": [
    "birthday"
  ],
  "query": {
    "term": {"_id" : "Frank"}
  }
}

对于#2,我正在做:

GET /myindex/_count
{
 "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "boss": "Bob"
          }
        }
      ]
    }
  }
}

获得#1然后立即获得#2似乎是一种浪费。有没有一种方法可以将查询合并成1个查询?

我的尝试:

GET /myindex/_search
    {
      "_source": [
        "birthday"
      ],
      "query": {
        "term": {"_id" : "Frank"},
        "bool": {
          "filter": [
            {
              "term": {
                "boss": "Bob"
              }
            }
          ]
        }
      }
    }

这显然是错误的,并返回一个错误:[term]格式错误的查询,预期的是[END_OBJECT],但找到的是[FIELD_NAME]

共有1个答案

贾实
2023-03-14

在其他查询中不需要第一个查询的结果之前,可以使用Multi-Search Api

 类似资料:
  • 我有一个elasticsearch索引用于存储关于人的信息。为了找到特定的人,我有一些查询,每个查询都单独工作,但是当我使用Bool查询将它们组合起来时,我会得到一个错误。 其中一个查询是对名称的模糊搜索 另一个查询用于搜索在特定日期范围内出生的人 现在我想组合这两个查询。我的bool查询: 虽然当我单独使用它们时,这两个查询都工作得很好,但当把它们组合起来时,我会得到一个错误。我的索引中有名字是

  • 问题内容: 我目前正在使用ElastSearch查询,该查询当前看起来如下所示: 因此,现在当条件1或条件2匹配时,将忽略文档。查询的外观如何,以便仅忽略符合条件1和条件2的文档? 问题答案: 由于不可能更新elasticsearch版本,因此我不得不找到另一个解决方案。这对我有用:

  • 问题内容: 我想创建以下查询的等效项- 我使用必须和应该尝试了布尔查询的不同组合,但似乎没有任何效果。能做到吗? 问题答案: 这样的事情怎么样:

  • 我有两个搜索词“86746184549”和“3302093809”。我正在执行两个单独的术语查询,以获取与每个ID匹配的一个文档。 和 我认为terms查询在这里不起作用,因为它不会返回包含不同字段的文档。 我之所以要组合查询是因为,假设我有100个这样的术语,那么我将打100个电话!!到elasticsearch服务器。

  • 问题内容: 我想使用ES进行图书搜索。因此,我决定将作者姓名和标题(作为嵌套文档)放入索引,如下所示: 我不明白的是:如何构造搜索查询,以便在搜索“一二”时仅找到第二本书,而在搜索“二三”时什么也找不到,而在搜索“一”时所有图书呢? 问题答案: 也许是这样的? 该查询基本上说一个文件必须有and 。您可以轻松地重新配置该查询。例如,如果您只想搜索作者,请删除嵌套部分。如果您想要另一本书,请更改嵌套

  • 我目前正在尝试将一个基于Solr的应用程序迁移到ElasticSearch。 我有这个lucene查询 根据我的理解,这是一个必须子句与布尔OR结合的组合: “获取名称中包含(foo和bar)或信息中包含(foo和bar)的所有文档。之后,根据条件筛选结果state=1,并增强具有图像的文档。” 我一直试图在MUST中使用bool查询,但未能将boolean或转换为MUST子句。以下是我的资料: