在ElasticSearch上使用空数组字段搜索文档

 mobiledu2502870687 发布于 2022-12-13 10:46

我有一组文档(类型'文章'),我想搜索具有元素/对象的文档到数组字段中

{
    "_type": "article",
    "_source": {
        "title": "Article 1",
        "locations": [
            {
                "address": "ES headquarter",
                "city": "Berlin"
            }
        ]
    }
}

我想要两个查询(只有一个,但有一点变化):

获取所有有位置的文章

获取所有没有位置的文章

我尝试了不同的东西,但可能我对ElasticSearch太糟糕了:

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": [
        {
          "type": {
            "value": "article"
          }
        },
        {
          "bool": {
            "must_not": {
              "missing": {
                "field": "location",
                "existence": true,
                "null_value": true
              }
            }
          }
        }
      ]
    }
  }
}

这不起作用.

你会如何解决我的疑问?

但主要是:

如何搜索具有空数组字段的文档?

Zoltan Balog.. 8

如果addresslocation数组中的必填字段,则可以修改查询:

"must_not": {
  "missing": {
    "field": "locations.address"
  }
}

AFAIK,在ES中,您无法查询非叶元素(如您的location字段)(请参阅问题),并且在object类型ES中展平嵌套字段(请参阅嵌套类型,对象类型).这就是我建议查询其中一个叶元素的原因.但它要求其中一个是强制性的(遗憾的是,在您的情况下不满意).

无论如何,我使用source_filtering中的_source参数找到了解决方案:

"must_not": {
  "script": {
    "script": "_source.locations.size() > 0"
  }
}

请注意,使用"lang":"groovy"你应该写:"script": "_source.locations.size > 0"

1 个回答
  • 如果addresslocation数组中的必填字段,则可以修改查询:

    "must_not": {
      "missing": {
        "field": "locations.address"
      }
    }
    

    AFAIK,在ES中,您无法查询非叶元素(如您的location字段)(请参阅问题),并且在object类型ES中展平嵌套字段(请参阅嵌套类型,对象类型).这就是我建议查询其中一个叶元素的原因.但它要求其中一个是强制性的(遗憾的是,在您的情况下不满意).

    无论如何,我使用source_filtering中的_source参数找到了解决方案:

    "must_not": {
      "script": {
        "script": "_source.locations.size() > 0"
      }
    }
    

    请注意,使用"lang":"groovy"你应该写:"script": "_source.locations.size > 0"

    2022-12-13 10:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有