Elasticsearch语法知多少之Term query
目录
目标
ES版本信息
官方文档
相关术语和注意事项
创建相关的索引和文档(数据用于实战案例)
创建索引
索引文档
Term query常见参数实战
基本语法
对text类型字段的处理方法
避免算分
设置关键词是否区分大小写
多值精确搜索
目标
掌握精准搜索,包括单值精确搜索和多值精确搜索。本文会列举各种常见的案例,通过这些案例来熟悉精准查询各个参数的功能和使用方法。
ES版本信息
7.17.5
官方文档
Term queryhttps://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-term-query.html
相关术语和注意事项
使用场景
Term query常用来处理价格、产品ID或用户名等精确值的搜索。特别注意:要避免对text类型字段进行精准查询,因为分词使得精准查询无法搜索到目标文档。推荐对text使用Match query。
单值精准搜索
搜索条件只有一个,且不对搜索条件进行分词,直接做等值搜索。
多值精准搜索
搜索条件有多个,且不对搜索条件进行分词,直接做等值搜索,只要有一个符合就匹配,相当于MySQL中的IN操作。
创建相关的索引和文档(数据用于实战案例)
创建索引
PUT /stu_db
{"settings": {"index": {"analysis.analyzer.default.type": "ik_max_word"}}
}
索引文档
PUT /stu_db/_bulk
{ "index": { "_id": "1"} }
{"address": "湖南省长沙市天心区","age":12,"name":"张三","figure":{"height":172.0,"weight":63.5},"mobilePhoneType":"huawei"}
{ "index": { "_id": "2"} }
{"address": "湖南省长沙市芙蓉区","age":13,"name":"诸葛神王","figure":{"height":180.0,"weight":75.5},"mobilePhoneType":"xiaomi"}
{ "index": { "_id": "3"} }
{"address": "广东省广州市白云区","age":14,"name":"北冥沧海","figure":{"height":2.0,"weight":80.5},"mobilePhoneType":"iphone"}
{ "index": { "_id": "4"} }
{"address": "湖北省武汉市江夏区","age":15,"name":"李四","figure":{"height":192.0,"weight":78.5},"mobilePhoneType":"iPhone"}
Term query常见参数实战
基本语法
需求:精确搜索年龄为12的文档。
第一步:实现需求。
GET /stu_db/_search
{"query": {"term": {"age": {"value": 12}}}
}#简短写法
GET /stu_db/_search
{"query": {"term": {"age": 12}}
}
对text类型字段的处理方法
需求:精确搜索姓名为"北冥沧海"的文档。
第一步:查询name字段的类型,发现它是text类型,子类型是keyword类型。
GET /stu_db/_mapping
第二步:官方文档指出:要避免对text类型字段进行精准查询,因为分词使得精准查询无法搜索到目标文档。此时可以使用keyword类型来精准搜索。
GET /stu_db/_search
{"query": {"term": {"name.keyword": {"value": "北冥沧海"}}}
}#简短写法
GET /stu_db/_search
{"query": {"term": {"name.keyword": "北冥沧海"}}
}
避免算分
#会计算分数
GET /stu_db/_search
{"query": {"term": {"figure.height": {"value": 172}}}
}
#不会计算分数,且充分利用缓存。
GET /stu_db/_search
{"query": {"constant_score": {"filter": {"term": {"figure.height": {"value": 172}}}}}
}
设置关键词是否区分大小写
说明:case_insensitive是term的可选参数,默认为false,表示关键词区分大小写,设置为true表示关键词不区分大小写。该参数在7.10.0开始有效。
需求:分别使用关键词"iphone"和"IPHONE"作为手机品牌的搜索条件,精准搜索文档。
第一步:实现需求。发现"iphone"为条件可以查询出来,而"IPHONE"为条件查询不出来。说明该参数默认区分大小写。
GET /stu_db/_search
{"query": {"term": {"mobilePhoneType": {"value": "iphone"}}}
}GET /stu_db/_search
{"query": {"term": {"mobilePhoneType": {"value": "IPHONE"}}}
}
第二步:设置为true,即关键词不区分大小写。使用关键词"IPHONE"作为手机品牌的搜索条件,精准搜索文档。可以搜索出文档,证明该参数分析正确。
GET /stu_db/_search
{"query": {"term": {"mobilePhoneType": {"value": "IPHONE","case_insensitive":true}}}
}
多值精确搜索
需求:搜索体重包含63.5和75.5的文档。
第一步:实现需求。
GET /stu_db/_search
{"query": {"terms": {"figure.weight":[63.5,75.5]}}
}
Elasticsearch语法知多少之Term query相关推荐
- Elasticsearch语法知多少之Multi_match query
目录 目标 ES版本信息 官方文档 新增测试数据 基本语法实战 基本格式 通配符匹配多个字段 逻辑操作符 设置评分权重 multi_match多种类型实战 best_fields最佳字段(默认) mo ...
- Elasticsearch学习---Term query和Match query
前言 在Elasticsearch中Term query和Match query都可以用来对文档中的数据进行检索,但是在检索结果上会稍有不同,本文通过案例对两者的差异进行说明. 数据准备 建立一个索引 ...
- ElasticSearch语法整理-DSL语言高级查询
Domain Specific Language 领域专用语言 DSL由叶子查询子句和复合查询子句两种子句组成. 无查询条件 无查询条件是查询所有,默认是查询所有的索引库的数据,或者使用match_a ...
- elasticsearch 查询(match和term)
elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简 ...
- 白话Elasticsearch01- 结构化搜索之使用term query来搜索数据
文章目录 需求描述 ES版本 _bulk 批量写几条数据 _bulk 用法 返回结果分析 字段Dynamic Mapping Dynamic Mapping 中 text类型的字段 查看分词 fiel ...
- 三级语法知多少(摘自庐江日语)
为了巩固日语,必要的基础语法必须牢记心中,所以每天稍微看看还是很重要的.本文摘与庐江日语网的学习资料,作者为miss2love.hoho,学习下- 大家好,我是miss2love. 如果你已经学会了五 ...
- ElasticSearch必知必会-基础篇
商业发展与职能技术部-体验保障研发组 康睿 姚再毅 李振 刘斌 王北永 说明:以下全部均基于eslaticsearch 8.1 版本 一.索引的定义 官网文档地址:https://www.elasti ...
- ElasticSearch(四):DSL Query
ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language) Query DSL是利用Rest API传递JSON格式的请求体(Req ...
- Elasticsearch语法(聚合)
查询语法结构 GET /{索引名}/_search {"from" : 0, // 返回搜索结果的开始位置"size" : 10, // 分页大小,一次返回多少 ...
最新文章
- deepin终端配置为英文
- MyEclipse 2017(英文版)安装教程
- div设置宽度,实现不等比缩放,或设置最小宽度 min-width
- h5 server send event(sse)
- python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表
- Flutter通过MethodChannel实现Flutter 与Android iOS 的双向通信
- 【nodejs原理源码赏析(9)】用node-ssh实现轻量级自动化部署
- 以太坊私链环境搭建和发币全过程
- faker假数据php,Faker首页、文档和下载 - 生成假数据的 PHP 库
- java color数组_java数组的学习
- 利用Java制作背单词小应用
- My Calendar I
- top 命令按内存和 cpu 排序
- 电商系统如何搭建会员体系/会员制玩法?
- 计算机多媒体作业是什么,多媒体计算机技术作业一
- 以太坊为什么又要进行“缪尔冰川”硬分叉?
- 爱五笔iWuBi for Mac(五笔练习工具)
- 很酷的瞄准镜样式光标效果
- chmod 权限777 -rwxrwxrwx是什么意思
- 【d3.js实践教程01】d3基本操作
热门文章
- C++ 之重定义问题
- centos 7 下双网卡bond 与 trunk口的交换机通信(用作KVM虚拟机)
- DELPHI bpl使用
- Error response from daemon: readlink /var/lib/docker/overlay2/l/OEK3ESNVLXTTUOL6PIEXF2S6VF: invalid
- Android多媒体开发技术
- 英语字母c的语言教案,[小班英语教案认识字母]幼儿园小班英语教案:字母C
- 全志android平台下的SDK快速移植
- p5.js 写个连连看
- 无人机三维建模的优势有哪些?
- 测试儿童智力软件开发,四种常用儿童智力测试办法介绍