gpt4 book ai didi

elasticsearch - 关于Elasticsearch json dsl查询结构的困惑

转载 作者:行者123 更新时间:2023-11-29 02:46:04 25 4
gpt4 key购买 nike

在 elasticsearch dsl 查询语法文档的许多地方,包装器 json 查询在解释中被跳过可能是为了减少文档大小。但是当我一直在浏览文档时,它一直很困惑。 在 json 查询中什么可以或应该去哪里的正式规则是什么? 换句话说,我试图找到所有弹性查询中通用的标准或模式,因为我需要构建一个内部 API 来查询弹性。是否有一个模板包含所有语法组件 "query': {} inside a "bool":{}filter 等,我可以在其中填写相关部分并且它仍然运行?

最佳答案

我还发现 Elastic 的 DSL 结构令人困惑,但在运行数百次查询后你就会习惯它。

以下是不同类型查询的几个(完整)示例,希望这有助于解决您可能遇到的一些问题,欢迎在评论中添加场景,我会添加更多示例。

这是标准查询的样子:

{
"query": {
"bool": {
"must": {
"match": {
"message": "abcd"
}
}
}
}
}

但是,这是过滤查询的样子,您会注意到在过滤 elasticsearch 时结构发生了变化:

{
"query": {
"filtered": {
"filter": {
"term": {
"message": "abcd"
}
}
}
}
}

(Read more about the difference between Filters and Queries)

下面是同时具有过滤器和查询的查询的样子:

{
"query": {
"filtered": {
"filter": {
"term": {
"message": "abcd"
}
},
"query": {
"bool": {
"must": {
"match": {
"message2": "bbbb"
}
}
}
}
}
}
}

以下是使用多个条件运行过滤器的方法:

{
"query": {
"filtered": {
"filter": {
"and": [
{
"term": {
"message": "abcd"
}
},
{
"term": {
"message2": "abcdd"
}
}
]
}
}
}
}

还有一个更复杂的过滤器:

{
"query": {
"filtered": {
"filter": {
"and": [
{
"term": {
"message": "abcd"
}
},
{
"term": {
"message2": "abcdd"
}
},
{
"or": [
{
"term": {
"message3": "abcddx"
}
},
{
"term": {
"message4": "abcdd2"
}
}
]
}
]
}
}
}
}

带有聚合的简单查询:

{
"query": {
"filtered": {
"filter": {
"term": {
"message": "abcd"
}
}
}
},
"aggs": {
"any_name_will_work_here": {
"max": {
"field": "metric1"
}
}
}
}

query_string 查询:

{
"query": {
"query_string": {
"default_field": "message",
"query": "this AND that"
}
}
}

使用 DSL 时需要考虑的一些其他事项:

  1. 您可以在顶层(查询上方)添加一个 size 参数,这将决定要返回的结果量。如果您只想要文档计数,您可以使用 "size": 0,它不会得到任何结果,只会得到元数据。
  2. 但是,当使用 aggs 时,size 参数有一个扭曲,在 aggs 字段中设置 "size": 0 将告诉 ES获取ALL聚合桶
  3. DSL 结构有异常(exception),在我的示例中,我通常使用 terms,但例如 range 有一些不同的结构。

关于elasticsearch - 关于Elasticsearch json dsl查询结构的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31791566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com