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

ES存在查询

穆单鹗
2023-03-14

我有一个具有嵌套字段的文档:

  • 测试数据。测试数据ID

我只想获取包含测试数据的文档。testDataId为空

以下是我的疑问:

{
  "bool": {
    "must_not": [
      { "exists": { "field": "testData.testDataId", "boost": 1.0 } }
    ],
    "adjust_pure_negative": true,
    "boost": 1.0
  }
}

但是我有和那些'testData'为空的文档。可以禁用吗?

例如:我有那3个文件

[
  {
    "name": "test_user_1",
    "additionalInfo": { "phoneNumber": "00000000", "address": "test_address" },
    "testData": { "testDataId": "some_id", "description": "test_description" }
  },
  {
    "name": "test_user_2",
    "additionalInfo": { "phoneNumber": "00000000", "address": "test_address" },
    "testData": { "description": "test_description" }
  },
  {
    "name": "test_user_3",
    "additionalInfo": { "phoneNumber": "00000000", "address": "test_address" }
  }
]

我希望只检索test_user_2

共有1个答案

国盛
2023-03-14

由于您正在处理嵌套字段,因此需要使用嵌套查询。

GET /72491619/_search
{
  "query": {
    "nested": {
      "path": "testData",
      "query": {
        "bool": {
          "must_not": [
            {
              "exists": {
                "field": "testData.testDataId"
                }
            }
          ]
        }
      }
    }
  }
}

为了设置索引和数据,我使用了下面的api调用:

PUT /72491619/
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "additionalInfo":{
        "type": "nested",
        "properties": {
          "phoneNumber": {
            "type": "keyword"
          },
          "address": {
            "type": "keyword"
          }
        }
      },
      "testData":{
        "type": "nested",
        "properties": {
          "testDataId": {
            "type": "keyword"
          },
          "description": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

POST /_bulk
{"index":{"_index":"72491619"}}
{"name":"test_user_1","additionalInfo":{"phoneNumber":"00000000","address":"test_address"},"testData":{"testDataId":"some_id","description":"test_description"}}
{"index":{"_index":"72491619"}}
{"name":"test_user_2","additionalInfo":{"phoneNumber":"00000000","address":"test_address"},"testData":{"description":"test_description"}}
{"index":{"_index":"72491619"}}
{"name":"test_user_3","additionalInfo":{"phoneNumber":"00000000","address":"test_address"}}
 类似资料:
  • 我们决定将es迁移到vespa es“minimumshould_match”查询如何转换为vespa查询? 例如:es查询: 上述查询意味着三次匹配至少两次 我尝试通过vespa“or”运算符转换此查询,但75%的人无法表达

  • 问题内容: 我的elasticsearch的映射如下所示: 问题是: 我正在使用elasticsearch_dsl Q()形成ES查询。当我的查询包含任何复杂的正则表达式时,它在大多数情况下都可以正常工作。但是,如果它包含正则表达式字符“!”,则它将完全失败。在里面。当搜索词包含“!”时,不会给出任何结果 在里面。 例如: 1.)(完美运作) 2.)(完美运作) 3.)(完美运作) 4.)(完美运

  • 我使用以下软件包Apache zookeeper 3 . 4 . 14 Apache storm 1 . 2 . 3 Apache Maven 3 . 6 . 2 elastic search 7 . 2 . 0(本地托管)Java 1.8.0_252 aws ec2中型实例,带4GB ram 我已经使用这个命令来增加jvm的虚拟内存(之前它显示了jvm没有足够内存的错误) 我已经创建了 mave

  • 现在有三台ES服务器,索引里大概有7000条数据,每条数据是内容放到txt中大概300kb以上,按某个查询条件查询的结果数量是4000多条数据。当size设置成9999的时候,需要查询30秒以上,这是为什么呢,有没有优化方案。

  • ES搜索中,可以通过GET /索引库名称/_doc/id查询文档,也可以通过 对文档进行查询 想问一下大佬们,这两者的区别是啥?都用在什么地方

  • 背景 canal 1.1.1版本之后, 内置增加客户端数据同步功能, Client适配器整体介绍: [[ClientAdapter]] canal adapter 的 Elastic Search 版本支持6.x.x以上, 如需其它版本的es可替换依赖重新编译client-adapter.elasticsearch模块 ElasticSearch适配器 1 修改启动器配置: application