问题描述

最近开始玩 elasticsearch,刚玩到 flattened 时,发现它文档里面有这么一句话 :

Only basic queries are allowed, with no support for numeric range queries or highlighting.

此类型只提供基本查询,不提供numeric的range查询以及高亮。

可是,当我往下翻阅文档的时候,发现它支持的类型中出现了range?Supported Operations

  • term, terms, and terms_set
  • prefix
  • range
  • match and multi_match
  • query_string and simple_query_string
  • exists

这是怎么回事呢?好奇使我成长~

分析

继续查阅文档,不经意间我们看到了这么一句话。

it treats all values as keywords。

flattened 会将所有的值都以 keywords 进行存储 (所以数字的存储也会是keyword,时间类型也并不会自动转成timestamp进行存储)

那么博主猜测,是不是因为它将所有的值都转成了keyword,所以才不支持 numeric range的?毕竟keyword时可以进行对比的,但是它是按照 ascii 码逐一进行对比,那么数字转成 keyword后,确实对比的值会不正确?ascii码表

那么我们来验证这一猜测。

首先创建一个带有 flattened 的mapping

PUT flattened_range
{"mappings": {"properties": {"title": {"type": "text"},"labels": {"type": "flattened"}}}
}

再添加几条数据!!

POST flattened_range/_doc/1
{"title": "flattened range 1.","labels": {"number": 20,"time": "2022-02-12 11:35:09"}
}POST flattened_range/_doc/2
{"title": "flattened range 2.","labels": {"number": 80,"time": "2022-02-12 11:36:09"}
}POST flattened_range/_doc/3
{"title": "flattened range 3.","labels": {"number": 100,"time": "2022-02-12 11:37:09"}
}POST flattened_range/_doc/4
{"title": "flattened range 4.","labels": {"number": 130,"time": "2022-02-12 11:38:09"}
}

那么,接下来我们进行数据查询:

GET flattened_range/_search
{"query": {"bool": {"filter": [{"range": {"labels.number": {"gte": 10,"lt": 90}}}]}}
}

查询结果是 20 80 100 130 都被查询出来了,这是因为字符串中的ascii码逐一对比,这些结果的首字母都大于等于1,小于等于9。

再查一次:

GET flattened_range/_search
{"query": {"bool": {"filter": [{"range": {"labels.number": {"gte": 10,"lt": 15}}}]}}
}

查询结果是 100 130 符合猜测预期!!!

结论

flattend 的 range 查询是针对keyword进行查询,逐个对比ascii码进行过滤,在数字转成 keyword的情况下,结果会不准确。

elasticsearch flattened 不支持 numeric range 却又支持 range查询?相关推荐

  1. Day121.ElasticSearch:概述、安装、基本操作、DSL高级查询

    目录 一.ElasticSearch概述 2.倒排索引 3.ElasticSearch 核心概念 ★ (一) ElasticSearch | 相关工具安装 (Windows) 2.kibana7.8 ...

  2. python range函数范围_Python range函数

    Python range函数教程 range函数详解 语法 range(start, stop[, step]) 参数 参数 描述 start 计数从 start 开始.默认是从 0 开始. stop ...

  3. javascript range 转为 html,javascript Range对象跨浏览器常用操作

    开发的功能主要涉及即时代码着色(CodeColoring)和语法提示(CodeHints)功能,稍后会总结功能开发中问题或提供源码. 以下是个人对Range对象的了解和常用操作的实例和总结: Rang ...

  4. Java 服务器端支持断点续传的源代码【支持快车、迅雷】

    Java 服务器端支持断点续传的源代码[支持快车.迅雷](仅支持 HTTP 协议) 网上关于 Java 支持 HTTP 断点续传的文章不少,但关于 Java 服务器端支持 HTTP 断点续传的却比较少 ...

  5. python range函数小数_python range函数与numpy arange函数,xrange与range的区别

    转自:https://www.cnblogs.com/ymjyqsx/p/6426764.html 1.range()返回的是range object,而np.arange()返回的是numpy.nd ...

  6. Java 服务器端支持断点续传的源代码【支持快车 迅雷】

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Java ...

  7. Android中使用WebView加载本地html并支持运行JS代码和支持缩放

    场景 Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/art ...

  8. javaScript ie8 不支持 new Date(2017-07);只支持new Date(2017/07/01)

    今天看以前代码的时候看到的JS的注释,记得当时调了老半天,ie8以上 以及谷歌,火狐没有这个问题. //ie8 不支持 new Date("2017-07");只支持new Dat ...

  9. 同时绑定onpropertychange 和 oninput 事件,实时检测 input、textarea输入改变事件,支持低版本IE,支持复制粘贴...

    实时检测 input.textarea输入改变事件,支持低版本IE,支持复制粘贴 检测input.textarea输入改变事件有以下几种: 1.onkeyup/onkeydown 捕获用户键盘输入事件 ...

最新文章

  1. 如何运行ImageMagick的命令行工具
  2. 【LiveVideoStack线上分享】— FreeSWITCH核心架构与流程控制
  3. Java当中 IO(File) 操作 之 递归打印子孙级目录和文件名称
  4. linux命令修改内容怎么回退,linux命令(修改).doc
  5. C++(6)--初识循环while,do-while
  6. yolov4用1050ti_简单粗暴的多目标跟踪神器 – DeepSort
  7. 京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)
  8. Phoenix Framework 1.4.7,自动化测试平台
  9. nbu备份oracle rac,利用NETBACKUP将备份写到磁盘上
  10. 三方面搞定http协议之“请求方法”
  11. 5.微服务设计 --- 分解单块系统
  12. 原生js读取json文件
  13. nginx 5xx 状态码分析
  14. tolist方法python_python中如何使用tolist()方法将数组或者矩阵转换为列表?
  15. kernel编译错误R_ARM_THM_JUMP19
  16. 什么是 DNS 泛洪?
  17. 4.顺序栈和循环队列的基本运算
  18. 中南大学邮箱客户端手动配置
  19. ubuntu 20.04 耳机没有声音
  20. C语言推箱子(带回退,撤回,返回上一步功能)

热门文章

  1. 【无标题】学生检讨书模板
  2. iTextSharp简单生成pdf和操作pdf添加水印
  3. 【数据结构与算法】期末考试必考重点复习知识指示
  4. 【软考学习4】计算机构成——CPU 结构、Flynn 分类法、CISC和RISC
  5. 中文词向量论文综述(二)
  6. 最新最全caffe2在win10下安装与在vs2015下编译(包括cuda、cmake、anaconda)
  7. 头歌 · NoSQL系列课程 · Neo4J / MongoDB 实验
  8. Xilinx zynq 7010/7020 GPIO - MIO
  9. android 读取图片信息,Android 图片Exif 信息读取和写入
  10. 矩阵等价-相似-合同