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

Elasticsearch中基于不同索引字段的查询

朱乐逸
2023-03-14

我有以下查询

{
   "from":0,
   "size":50000,
   "_source":[
      "T121",
      "timestamp"
   ],
   "sort":{
      "timestamp":{
         "order":"asc"
      }
   },
   "query":{
      "bool":{
         "must":{
            "range":{
               "timestamp":{
                  "gte":"2017-01-17 11:44:41.347",
                  "lte":"2017-02-18 11:44:47.878"
               }
            }
         },
         "must":{
            "exists":{
               "field":"T121"
            }
         }
      }
   }
}

http://172.22.23.169:9200/index1,index2,index3/_search?pretty

使用这个URL,我想查询Elasticsearch中的许多索引,并且只返回那些存在特定字段的文档。

是否可以在“exists”子句中放入一个字段列表,我在其中定义“field1”、“field2”或“fiedl3”是否存在于某个文档中,否则返回它,或者我必须编写这种情况的脚本?

共有1个答案

丰俊艾
2023-03-14

要搜索所有索引,请使用>http://172.22.23.169:9200/_search?pretty

若要搜索所选索引,请将以下筛选器添加到“bool”筛选器

"must": {
  "terms": {
    "_index": [
      "index1",
      "index2"
    ]
  }
}

对于OR'ing multiple“exists”,可以使用带有multiple exists的should子句并指定“minimum_should_match”来控制搜索的记录。

{
  "from":0,
  "size":50000,
  "_source":[
    "T121",
    "timestamp"
  ],
  "sort":{
    "timestamp":{
      "order":"asc"
    }
  },
  "query":{
    "bool":{
      "must":{
        "range":{
          "timestamp":{
            "gte":"2017-01-17 11:44:41.347",
            "lte":"2017-02-18 11:44:47.878"
          }
        }
      },
      "should":[
        {
          "exists":{
            "field":"field1"
          }
        },
        {
          "exists":{
            "field":"field2"
          }
        },
        {
          "exists":{
            "field":"field3"
          }
        }
      ]
    }
  }
}
 类似资料:
  • 问题内容: 假设我有一千个键,并且我想存储关联的值。直观的方法似乎像 对于Elasticsearch索引具有数千个键来说,这是一种不良的设计模式吗?以这种方式引入的每个键都会为索引下的每个文档增加开销吗? 问题答案: 如果您知道键数有上限,那么几千个字段就不成问题。 问题是当您拥有一组无限制的键时,例如,当键是从一个值派生时,因为您将拥有一个不断增长的映射关系以及簇状态。它还可能导致奇怪的搜索。

  • 我需要在我的应用程序中添加搜索栏。搜索将按名和姓进行搜索。我不知道如何编写elastcsearch查询。名字和姓氏是两个分开的字段。我是个新手。 例:名:约翰,姓:约书亚 搜索栏字符串为上层结果:约翰·乔·约翰·乔·约翰·乔·乔·约翰·约书亚·约翰·约书亚·乔...

  • 我有一个endpoint,我正在将它代理到ElasticSearchAPI中,以进行简单的用户搜索。 有关这些参数的一些详细信息如下 所有参数都是可选的 昵称可以作为全文搜索进行搜索(即'myUser'将返回'myUsername') 电子邮件必须完全匹配 名称可以搜索为每个令牌的全文搜索(即'john'将返回'John Smith') ElasticSearch调用应将参数集体视为AND'd。

  • 问题内容: 如何查询或过滤一个字段不等于另一个字段?即,其中document1.city1.name不等于document1.city2.name。 这个的一些版本? http://www.elasticsearch.org/guide/zh- CN/elasticsearch/reference/current/search-request-script- fields.html 问题答案: 是

  • 问题内容: 我有一个文档,其中包含许多我从未查询过的字段,因此我想关闭这些字段的索引以节省资源。我相信我需要禁用该字段,但是如何指定要对哪些字段建立索引呢? 问题答案: 默认情况下,所有字段也都在_all特殊字段内建立索引,该字段开箱即用地提供了所谓的catchall功能。但是,可以通过以下选项为映射中的每个字段指定是否要将其添加到_all字段: 上面的示例禁用了name字段的默认行为,该行为不会

  • 假设我们有一个ElasticSearch实例和一个索引。我现在要在整个索引中搜索包含特定值的文档。它与在多个字段上搜索该查询相关,因此我不想指定要在其中搜索的每个字段。 到目前为止我的尝试(使用NEST)如下: 在ConnectionString上应用以下调试后,我将获得以下输出: 我该怎么做?为什么我的查询是错误的?