目录

目标

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相关推荐

  1. Elasticsearch语法知多少之Multi_match query

    目录 目标 ES版本信息 官方文档 新增测试数据 基本语法实战 基本格式 通配符匹配多个字段 逻辑操作符 设置评分权重 multi_match多种类型实战 best_fields最佳字段(默认) mo ...

  2. Elasticsearch学习---Term query和Match query

    前言 在Elasticsearch中Term query和Match query都可以用来对文档中的数据进行检索,但是在检索结果上会稍有不同,本文通过案例对两者的差异进行说明. 数据准备 建立一个索引 ...

  3. ElasticSearch语法整理-DSL语言高级查询

    Domain Specific Language 领域专用语言 DSL由叶子查询子句和复合查询子句两种子句组成. 无查询条件 无查询条件是查询所有,默认是查询所有的索引库的数据,或者使用match_a ...

  4. elasticsearch 查询(match和term)

    elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简 ...

  5. 白话Elasticsearch01- 结构化搜索之使用term query来搜索数据

    文章目录 需求描述 ES版本 _bulk 批量写几条数据 _bulk 用法 返回结果分析 字段Dynamic Mapping Dynamic Mapping 中 text类型的字段 查看分词 fiel ...

  6. 三级语法知多少(摘自庐江日语)

    为了巩固日语,必要的基础语法必须牢记心中,所以每天稍微看看还是很重要的.本文摘与庐江日语网的学习资料,作者为miss2love.hoho,学习下- 大家好,我是miss2love. 如果你已经学会了五 ...

  7. ElasticSearch必知必会-基础篇

    商业发展与职能技术部-体验保障研发组 康睿 姚再毅 李振 刘斌 王北永 说明:以下全部均基于eslaticsearch 8.1 版本 一.索引的定义 官网文档地址:https://www.elasti ...

  8. ElasticSearch(四):DSL Query

    ES中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified Language) Query DSL是利用Rest API传递JSON格式的请求体(Req ...

  9. Elasticsearch语法(聚合)

    查询语法结构 GET /{索引名}/_search {"from" : 0, // 返回搜索结果的开始位置"size" : 10, // 分页大小,一次返回多少 ...

最新文章

  1. deepin终端配置为英文
  2. MyEclipse 2017(英文版)安装教程
  3. div设置宽度,实现不等比缩放,或设置最小宽度 min-width
  4. h5 server send event(sse)
  5. python读取txt文件存储数组_python : 将txt文件中的数据读为numpy数组或列表
  6. Flutter通过MethodChannel实现Flutter 与Android iOS 的双向通信
  7. 【nodejs原理源码赏析(9)】用node-ssh实现轻量级自动化部署
  8. 以太坊私链环境搭建和发币全过程
  9. faker假数据php,Faker首页、文档和下载 - 生成假数据的 PHP 库
  10. java color数组_java数组的学习
  11. 利用Java制作背单词小应用
  12. My Calendar I
  13. top 命令按内存和 cpu 排序
  14. 电商系统如何搭建会员体系/会员制玩法?
  15. 计算机多媒体作业是什么,多媒体计算机技术作业一
  16. 以太坊为什么又要进行“缪尔冰川”硬分叉?
  17. 爱五笔iWuBi for Mac(五笔练习工具)
  18. 很酷的瞄准镜样式光标效果
  19. chmod 权限777 -rwxrwxrwx是什么意思
  20. 【d3.js实践教程01】d3基本操作

热门文章

  1. C++ 之重定义问题
  2. centos 7 下双网卡bond 与 trunk口的交换机通信(用作KVM虚拟机)
  3. DELPHI bpl使用
  4. Error response from daemon: readlink /var/lib/docker/overlay2/l/OEK3ESNVLXTTUOL6PIEXF2S6VF: invalid
  5. Android多媒体开发技术
  6. 英语字母c的语言教案,[小班英语教案认识字母]幼儿园小班英语教案:字母C
  7. 全志android平台下的SDK快速移植
  8. p5.js 写个连连看
  9. 无人机三维建模的优势有哪些?
  10. 测试儿童智力软件开发,四种常用儿童智力测试办法介绍