elasticsearch flattened 不支持 numeric range 却又支持 range查询?
问题描述
最近开始玩 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查询?相关推荐
- Day121.ElasticSearch:概述、安装、基本操作、DSL高级查询
目录 一.ElasticSearch概述 2.倒排索引 3.ElasticSearch 核心概念 ★ (一) ElasticSearch | 相关工具安装 (Windows) 2.kibana7.8 ...
- python range函数范围_Python range函数
Python range函数教程 range函数详解 语法 range(start, stop[, step]) 参数 参数 描述 start 计数从 start 开始.默认是从 0 开始. stop ...
- javascript range 转为 html,javascript Range对象跨浏览器常用操作
开发的功能主要涉及即时代码着色(CodeColoring)和语法提示(CodeHints)功能,稍后会总结功能开发中问题或提供源码. 以下是个人对Range对象的了解和常用操作的实例和总结: Rang ...
- Java 服务器端支持断点续传的源代码【支持快车、迅雷】
Java 服务器端支持断点续传的源代码[支持快车.迅雷](仅支持 HTTP 协议) 网上关于 Java 支持 HTTP 断点续传的文章不少,但关于 Java 服务器端支持 HTTP 断点续传的却比较少 ...
- python range函数小数_python range函数与numpy arange函数,xrange与range的区别
转自:https://www.cnblogs.com/ymjyqsx/p/6426764.html 1.range()返回的是range object,而np.arange()返回的是numpy.nd ...
- Java 服务器端支持断点续传的源代码【支持快车 迅雷】
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Java ...
- Android中使用WebView加载本地html并支持运行JS代码和支持缩放
场景 Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/art ...
- javaScript ie8 不支持 new Date(2017-07);只支持new Date(2017/07/01)
今天看以前代码的时候看到的JS的注释,记得当时调了老半天,ie8以上 以及谷歌,火狐没有这个问题. //ie8 不支持 new Date("2017-07");只支持new Dat ...
- 同时绑定onpropertychange 和 oninput 事件,实时检测 input、textarea输入改变事件,支持低版本IE,支持复制粘贴...
实时检测 input.textarea输入改变事件,支持低版本IE,支持复制粘贴 检测input.textarea输入改变事件有以下几种: 1.onkeyup/onkeydown 捕获用户键盘输入事件 ...
最新文章
- 如何运行ImageMagick的命令行工具
- 【LiveVideoStack线上分享】— FreeSWITCH核心架构与流程控制
- Java当中 IO(File) 操作 之 递归打印子孙级目录和文件名称
- linux命令修改内容怎么回退,linux命令(修改).doc
- C++(6)--初识循环while,do-while
- yolov4用1050ti_简单粗暴的多目标跟踪神器 – DeepSort
- 京东宙斯平台使用方法(accesstoken,appkey,appsecret参数和SDK的获取)
- Phoenix Framework 1.4.7,自动化测试平台
- nbu备份oracle rac,利用NETBACKUP将备份写到磁盘上
- 三方面搞定http协议之“请求方法”
- 5.微服务设计 --- 分解单块系统
- 原生js读取json文件
- nginx 5xx 状态码分析
- tolist方法python_python中如何使用tolist()方法将数组或者矩阵转换为列表?
- kernel编译错误R_ARM_THM_JUMP19
- 什么是 DNS 泛洪?
- 4.顺序栈和循环队列的基本运算
- 中南大学邮箱客户端手动配置
- ubuntu 20.04 耳机没有声音
- C语言推箱子(带回退,撤回,返回上一步功能)
热门文章
- 【无标题】学生检讨书模板
- iTextSharp简单生成pdf和操作pdf添加水印
- 【数据结构与算法】期末考试必考重点复习知识指示
- 【软考学习4】计算机构成——CPU 结构、Flynn 分类法、CISC和RISC
- 中文词向量论文综述(二)
- 最新最全caffe2在win10下安装与在vs2015下编译(包括cuda、cmake、anaconda)
- 头歌 · NoSQL系列课程 · Neo4J / MongoDB 实验
- Xilinx zynq 7010/7020 GPIO - MIO
- android 读取图片信息,Android 图片Exif 信息读取和写入
- 矩阵等价-相似-合同