我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解如何在Elasticsearch中搜索空值

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解如何在Elasticsearch中搜索空值

引言

根据 Elasticsearch 文档,无法索引或搜索空值 null。 当一个字段设置为 null(或空数组或空值数组)时,它被视为该字段没有值。

那么如何找到 product_name 为空(null)的文件呢?

选项 1:null_value 映射参数

你可以在配置索引映射时定义 null_value 参数。 它将允许你在索引文档时用指定值替换显式空值 null,以便它可以被索引和搜索。

让我们创建索引名称 products,其中包含值为 NULL 的 product_name 字段。

 PUT products
 {
   "mappings": {
     "properties": {
       "product_name":{
         "type": "keyword",
         "null_value": "NULL"
       }
     }
    }
  }

让我们用 product_name 字段索引一些文档,该字段的值为 null 或空数组。

 POST products/_doc/1
 {
   "product_name": null,
   "company":"apple"
 }
 POST products/_doc/2
 {
   "product_name": [],
   "company":"apple"
  }

让我们查询并检查我们得到的结果:

  POST products/_search
  {
    "query": {
      "match": {
        "product_name": "NULL"
      }
    }
  }

上面的搜索结果为:

`
 {
   "took": 1009,
   "timed_out": false,
   "_shards": {
     "total": 1,
     "successful": 1,
     "skipped": 0,
     "failed": 0
   },
    "hits": {
      "total": {
        "value": 1,
        "relation": "eq"
      },
      "max_score": 0.2876821,
      "hits": [
        {
          "_index": "products",
          "_id": "1",
          "_score": 0.2876821,
          "_source": {
            "product_name": null,
            "company": "apple"
          }
        }
      ]
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

什么??? 为什么 Elasticsearch 只返回一个文档而不返回第二个具有空数组的文档? 因为,

  • 一个空数组不包含明确的 null,因此不会被 null_value 替换。

此外,product_name 值仅作为 null 而不是作为在索引映射中设置的 NULL。 因为,

  • null_value 只影响数据的索引方式,它不会修改 _source 文档。

现在,当 product_name 为 null 或空数组时,如何将两个文档都放入结果中?

选项2:使用 MUST_NOT 查询

让我们定义没有 null_value 的索引映射和与上面相同的索引文档。

 PUT products
 {
   "mappings": {
     "properties": {
       "product_name":{
         "type": "keyword"
       }
     }
   }
  }

现在你可以使用以下查询:

  POST products/_search
  {
    "query": {
      "bool": {
        "must_not": [
          {
            "exists": {
              "field": "product_name"
            }
          }
        ]
      }
    }
  }

上述查询的结果,它现在返回两个结果:

`
 {
   "took": 1,
   "timed_out": false,
   "_shards": {
     "total": 1,
     "successful": 1,
     "skipped": 0,
     "failed": 0
   },
    "hits": {
      "total": {
        "value": 2,
        "relation": "eq"
      },
      "max_score": 0,
      "hits": [
        {
          "_index": "products",
          "_id": "1",
          "_score": 0,
          "_source": {
            "product_name": null,
            "company": "apple"
          }
        },
        {
          "_index": "products",
          "_id": "2",
          "_score": 0,
          "_source": {
            "product_name": [],
            "company": "apple"
          }
        }
      ]
    }
  }
`![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)

将 must_not 与 exists 查询一起使用的优点:

  • 此选项 2 不依赖于字段的数据类型,无论字段的数据类型如何,它都会起作用,但选项 1 null_value 需要与字段的数据类型相同。 例如,长字段不能有字符串 null_value。
  • 选项 1 不适用于文本类型的字段,因为 Elasticsearch 不允许为文本类型的字段设置 null_value 参数。
  • 选项 2 也是单一且高效的解决方案,因为 1) 它不需要根据字段映射中定义的值添加 null 值的开销。2)索引大小也会变小,导致索引变少,搜索查询变快。

以上就是详解如何在Elasticsearch中搜索空值的详细内容,更多关于Elasticsearch搜索空值的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解如何在Elasticsearch中搜索空值

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解如何在Elasticsearch中搜索空值

这篇文章主要为大家介绍了如何在Elasticsearch中搜索空值的方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-01-28

如何在PHP中使用ElasticSearch实现搜索

这篇“如何在PHP中使用ElasticSearch实现搜索”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何在PHP中使用E
2023-06-05

Elasticsearch分布式搜索中的查询优化策略(如何优化Elasticsearch分布式搜索的查询性能?)

Elasticsearch分布式搜索中的查询优化策略有助于提高性能。策略包括:分片和副本管理(分片数、副本数)索引设置优化(映射、字段数据、_all字段禁用)查询优化(过滤器、布尔查询、范围查询)分词和排序优化(分词器选择、排序脚本)查询缓存(减少重复查询开销)其他优化(热分片、异步查询、监控和调整)
Elasticsearch分布式搜索中的查询优化策略(如何优化Elasticsearch分布式搜索的查询性能?)
2024-04-02

Elasticsearch分布式搜索中的数据清理与过期策略(Elasticsearch如何处理分布式搜索中的数据清理和过期?)

Elasticsearch通过多种机制管理过期和不必要的数据。数据清理机制包括:删除策略(立即删除、保留策略、滚动索引、快照和还原)和过期文档(_ttl字段)。索引维护任务(刷新、合并、删除)定期执行以优化性能。过期策略包括TTL策略(根据_ttl字段删除过期文档)和生命周期策略(根据文档元数据执行操作)。删除集群策略允许删除不再需要的数据。实施最佳实践(定义保留时间、使用适当策略、监控索引健康、使用生命周期策略、进行备份)可优化数据清理和过期策略,保持索引的健康和性能。
Elasticsearch分布式搜索中的数据清理与过期策略(Elasticsearch如何处理分布式搜索中的数据清理和过期?)
2024-04-02

Android中如何实现清空搜索框的文字

需求:项目中的有关搜索的地方,加上清空文字的功能,目的是为了增加用户体验,使用户删除文本更加快捷 解决过程:开始的时候感觉这个东西不太好实现,主要就是布局的问题,可能是开始顾虑的太多了,再加上当时产品催的不太紧,而且这个功能也不是必须实现的
2022-06-06

Elasticsearch分布式搜索引擎在知识图谱构建中的应用(如何利用Elasticsearch进行分布式知识图谱的构建与搜索?)

Elasticsearch作为分布式搜索引擎,在知识图谱构建中发挥关键作用,包括索引知识图谱数据、分布式索引、知识图谱构建和知识图谱搜索。其可扩展性、分布式特性、灵活的索引方案和强大的搜索功能使其成为构建语义丰富知识库的理想选择,应用于生物医学、金融、电子商务、自然语言处理和科学研究等广泛领域。
Elasticsearch分布式搜索引擎在知识图谱构建中的应用(如何利用Elasticsearch进行分布式知识图谱的构建与搜索?)
2024-04-02

Elasticsearch分布式搜索引擎在大数据场景下的应用(大数据场景下如何应用Elasticsearch进行分布式搜索?)

Elasticsearch作为分布式搜索引擎,在大数据场景下提供分布式索引和搜索、可扩展性、容错性、实时索引、全文搜索等优势。具体应用包括日志分析、应用程序性能监控、电子商务搜索、社交媒体分析和机器学习集成。最佳实践包括选择合适的文档类型、优化索引设置、使用文档映射、进行性能调整、使用快照和备份。
Elasticsearch分布式搜索引擎在大数据场景下的应用(大数据场景下如何应用Elasticsearch进行分布式搜索?)
2024-04-02

详解Elasticsearch如何把一个索引变为只读

这篇文章主要为大家介绍了详解Elasticsearch如何把一个索引变为只读示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-06

Elasticsearch分布式搜索中的滚动更新与索引重建(Elasticsearch如何进行滚动更新和索引重建?)

滚动更新和索引重建是Elasticsearch管理分布式搜索集群中的索引更改的两种策略。滚动更新涉及逐步更新索引分片,在更新过程中保持集群可用。它适用于需要无停机时间、可扩展性和可靠性的场景。索引重建涉及一次性创建和重建新索引。它更简单、更快,并确保数据一致性。但是,它会导致停机时间和数据丢失风险。选择最合适的策略取决于特定用例的需求,例如停机时间、可扩展性、可靠性、简单性、性能和数据一致性。
Elasticsearch分布式搜索中的滚动更新与索引重建(Elasticsearch如何进行滚动更新和索引重建?)
2024-04-02

Elasticsearch分布式搜索的跨域查询与聚合处理(如何处理Elasticsearch分布式搜索中的跨域查询和聚合?)

Elasticsearch通过跨索引集群(CCS)支持跨域查询,使用CCR插件将索引复制到目标集群。跨域聚合也类似,但需要CCS插件。最佳实践包括使用单独索引、优化网络、使用管理工具和监控性能。跨域查询和聚合提供了对分布式数据的访问,但可能更昂贵且受网络延迟影响。
Elasticsearch分布式搜索的跨域查询与聚合处理(如何处理Elasticsearch分布式搜索中的跨域查询和聚合?)
2024-04-02

Elasticsearch分布式搜索在云计算平台上的部署与管理(如何在云计算平台上部署和管理Elasticsearch分布式搜索引擎?)

Elasticsearch分布式搜索在云计算平台上的部署和管理涉及选择云提供商、创建集群、配置安全和网络。管理包括监控、备份、升级、容量规划和高可用性。云平台提供按需定价、自动化、集成和容器支持等特有功能。最佳实践包括选择合适实例类型、配置索引设置、启用副本、使用快照和实施安全措施。通过利用云计算平台的优势,组织可以高效部署和管理Elasticsearch集群,满足大数据搜索和分析的需求。
Elasticsearch分布式搜索在云计算平台上的部署与管理(如何在云计算平台上部署和管理Elasticsearch分布式搜索引擎?)
2024-04-02

Elasticsearch分布式搜索中的近义词与模糊查询处理(Elasticsearch如何处理分布式搜索中的近义词和模糊查询?)

Elasticsearch通过同义词词库和编辑距离算法处理分布式搜索中的近义词和模糊查询。同义词词库扩展查询以包含相关术语,而模糊查询匹配相似术语,编辑距离为低。这在分布式群集中以本地方式执行,提供可扩展性、低延迟和一致性。此外,Elasticsearch提供拼写检查、自动完成、N-gram分词和自定义同义词词库等相关功能,以增强近义词和模糊查询处理,确保准确且相关的搜索结果。
Elasticsearch分布式搜索中的近义词与模糊查询处理(Elasticsearch如何处理分布式搜索中的近义词和模糊查询?)
2024-04-02

利用Elasticsearch实现大规模分布式搜索的解决方案(大规模数据下如何应用Elasticsearch进行分布式搜索?)

利用Elasticsearch实现大规模分布式搜索的解决方案:Elasticsearch通过分片和副本将搜索请求分布到多个节点,提高并发性和容错能力。集群管理功能简化了管理,自动检测故障并平衡负载。近实时搜索和高级搜索功能满足复杂查询和用例需求。Elasticsearch具有高可扩展性和容错能力,适用于大型分布式搜索场景,如电子商务、日志分析、安全分析等。
利用Elasticsearch实现大规模分布式搜索的解决方案(大规模数据下如何应用Elasticsearch进行分布式搜索?)
2024-04-02

Elasticsearch分布式搜索中的安全与加密通信(如何保障Elasticsearch分布式搜索的安全并进行加密通信?)

本文介绍了保障Elasticsearch分布式搜索系统安全的最佳实践和加密通信方法。通过实施认证、授权、网络安全、数据加密、审计和备份,可以有效防范数据泄露和未经授权访问。加密通信采用TLS/SSL、IPSecVPN和SSH隧道等方法,确保数据在传输过程中得到保护。具体的实施步骤包含身份验证、防火墙配置、数据分片加密、日志记录、备份和TLS/SSL部署等。通过这些措施,Elasticsearch分布式搜索系统的安全性得到显著增强,降低了数据泄露和未经授权访问的风险。
Elasticsearch分布式搜索中的安全与加密通信(如何保障Elasticsearch分布式搜索的安全并进行加密通信?)
2024-04-02

Elasticsearch分布式搜索中的数据同步与一致性保障(Elasticsearch如何确保分布式搜索数据的一致性和同步?)

Elasticsearch采用多项策略确保分布式搜索中的数据一致性和同步性:主分片和副本分片:写入请求由主分片处理,并复制到副本分片。写入协调:更改传播到副本分片之前,由主分片确认。刷新和提交:定期刷新确保数据在内存中可用,提交永久存储数据。同步复制:更改从主分片复制到副本分片,确保同步。确认机制:副本分片确认更改已接收,以确认写入成功。分块快照和文件系统快照:提供数据复制和恢复选项。
Elasticsearch分布式搜索中的数据同步与一致性保障(Elasticsearch如何确保分布式搜索数据的一致性和同步?)
2024-04-02

如何在PyTorch中进行超参数搜索

在PyTorch中进行超参数搜索通常有两种常用的方法:使用Grid Search:通过定义一个超参数的候选值列表,对所有可能的组合进行穷举搜索,选择表现最好的超参数组合。可以使用GridSearchCV类来实现这一过程。from sklea
如何在PyTorch中进行超参数搜索
2024-03-14

如何在Java中操作二叉搜索树

如何在Java中操作二叉搜索树?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、二叉搜索树插入元素 class Node { int val;
2023-06-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录