当前位置: 首页 > 面试题库 >

elasticsearch_search与_count语法

高嘉熙
2023-03-14
问题内容

似乎_search和_count采用不同的查询格式。例如,这是我的_search查询:

{
  query: {
    filtered: {
      query: { match: { Name: "bob" } },
      filter: { term: { GroupIds: 3 } }
    }
  }
}

但是为了_count理解它,我需要删除外部query

{
  filtered: {
    query: { match: { Name: "bob" } },
    filter: { term: { GroupIds: 3 } }
  }
}

那将无法使用_search。为了进一步混淆我,_search如果将query filtered都删除,将接受它:

{
  query: { match: { Name: "bob" } },
  filter: { term: { GroupIds: 3 } }
}

那么使用_searchvs. 时查询DSL的实际规则是什么_count


问题答案:

搜索是elasticsearch最复杂的操作之一,因此它接受的顶级几个不同的参数,包括queryfilterfacetssize等等。

query参数应包含查询DSL定义的查询。它可以是任何查询,包括match_allfiltered。例如,以下是搜索请求的外观,该请求接受所有记录并返回前20位。

{
    "query": {
        "match_all": {}
    },
    "size": 20
}

filter搜索请求中的参数可以接受过滤器(同样如查询DSL中所定义)。该过滤器在搜索中具有特殊功能-
它不会影响请求中的任何方面。因此,通常,filter当您要过滤搜索结果但又不影响构面时,仅将参数与构面搜索一起使用才有意义。在所有其他情况下,filtered查询通常会产生更快的结果。

说到filtered查询,查询就是一个查询,因此可以query在搜索请求的参数中使用它。这也是一个复合查询。它在其query参数中接受另一个查询,并在其参数中接受一个过滤器,filter并生成一个复合查询,该复合查询仅返回同时满足该查询及其组成的过滤器的文档。换句话说,查询中的filter参数filtered会影响搜索结果和构面,而查询中的filter参数search只会影响搜索结果,而不会影响构面。

最后是count请求。该count请求是比简单得多search的要求。它不适用于刻面,并且size参数实际上没有多大意义,因为我们始终要求完整计数。因此,所有count请求期望的只是一个顶级查询。例如,为了计算所有文档,count请求将包含以下内容:

{
    "match_all": {}
}


 类似资料:
  • 关于Spring Boot的小问题,一些有用的默认度量,以及如何在Grafana中正确使用它们。 我看到许多这样的模式。 举几个例子: 不幸的是,我不确定如何使用它们,如何正确地使用它们,并且感觉我的无知使我错过了一些伟大的应用洞察力。

  • 在 JavaScript 中,很多内建函数都支持传入任意数量的参数。 例如: Math.max(arg1, arg2, ..., argN) —— 返回入参中的最大值。 Object.assign(dest, src1, ..., srcN) —— 依次将属性从 src1..N 复制到 dest。 ……等。 在本章中,我们将学习如何编程实现支持函数可传入任意数量的参数。以及,如何将数组作为参数传递

  • 我不熟悉MongoDB和Scala语言 我正在使用scala语言在本地连接mongodb 我正在使用下面的依赖项 // https://mvnrepository.com/artifact/org.mongodb.scala/mongo-scala-driver libraryDependencies=“org.mongodb.scala”%%“mongo scala驱动程序”%%“4.2.3”

  • 问题内容: 我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但是它们倾向于抽象的差异,而不是实际的含义。 我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以

  • 是否有可能为raku语法定义一个自定义lexer,即将字符串转换为int-id值流的lexer?我在玩弄语法结构。 规则看起来很直观,因为它们可能在递归下降解析器中转换为函数。然而,令牌和正则表达式我希望能够通过显式令牌ID和一个接口将它们映射到一个名称,这样我就可以编写自己的lexer了?

  • 问题内容: 我正在尝试更好地理解它们之间的区别。我在网上找到了很多解释,但它们倾向于抽象的差异,而不是实际的含义。 我的大部分编程经验都来自CPython(动态的,解释的)和Java(静态的,编译的)。但是,我知道还有其他种类的解释和编译语言。除了可以从以编译语言编写的程序中分发可执行文件这一事实之外,每种类型是否有优点/缺点?通常,我听到人们争辩说解释语言可以交互使用,但是我相信编译语言也可以具