ES--term&terms查询
2.1、term&terms
查询
2.1.1、term查询
??参考: Elasticsearch Reference [7.10] ? Query DSL ? Term-level queries ? Term query
??term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,如关键字手机,不会分成手和机;再根据关键字去文档分词库中去匹配内容。
类似于MySQL库的 where province = ?
2.1.1.1、命令
# from size类似于mysql的limit
POST /sms-logs-index/_search
{
"from": 0,
"size": 10,
"query": {
"term": {
"province": {
"value": "北京"
}
}
}
}
![ES--term&terms查询](https://img.it610.com/image/info9/b02c96b83ae54b138c0725de4d672901.jpg)
文章图片
2.1.1.2、java代码
@Test
public void termQuery() throws IOException {
//1。创建request对象,查询用的对象一般都是SearchRequest对象
SearchRequest mySearchRequest = new SearchRequest(index);
//2,指定查询条件,依赖查询条件的对象SearchSourceBuilder的对象
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.from(0).size(10).query(QueryBuilders.termQuery("province", "北京"));
//指定term查新条件mySearchRequest.source(builder);
//3. 执行查询
SearchResponse search = client.search(mySearchRequest, RequestOptions.DEFAULT);
//4. 获取到_source中的数据,并展示
//注意RESTFUL风格上是两个hits,所以这里要两次getHits()
for (SearchHit hit : search.getHits().getHits()) {
Map result = hit.getSourceAsMap();
System.out.println(result);
}
}
2.1.2、terms 查询 terms和terms的查询机制是一样的,都不会将指定的查询关键字进行分词,直接去分词库中匹配,找到相应的文档内容。
terms:是针对一个字段包含多个值时使用。
换句话说:
- term类似于MySQL的 where province=?
- terms类似于MySQL中的 where province in (?, ? ,?)
![ES--term&terms查询](https://img.it610.com/image/info9/40c86d737db441acb3ffd70f597e42fb.jpg)
文章图片
2.1.2.1、命令
POST /sms-logs-index/_search
{
"from": 0,
"size": 20,
"query": {
"terms": {
"province": [
"北京",
"上海",
"杭州"
]
}
}
}
2.1.2.2、java代码
@Test
public void termsQuery() throws IOException {
//1。创建request对象,查询用的对象一般都是SearchRequest对象
SearchRequest mySearchRequest = new SearchRequest(index);
//2,指定查询条件,依赖查询条件的对象SearchSourceBuilder的对象
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.from(0).size(10).query(QueryBuilders.termsQuery("province", "北京", "上海", "杭州"));
//指定term查新条件// 注意将条件放入Request对象中
mySearchRequest.source(builder);
//3. 执行查询
SearchResponse search = client.search(mySearchRequest, RequestOptions.DEFAULT);
//4. 获取到_source中的数据,并展示
//注意RESTFUL风格上是两个hits,所以这里要两次getHits()
for (SearchHit hit : search.getHits().getHits()) {
Map result = hit.getSourceAsMap();
System.out.println(result);
}
}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 宋仲基&宋慧乔(我们不公布恋情,我们直接结婚。)
- 21天|21天|M&M《见识》04
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- 2021—3—8日教练实践总结&呼吸练习&觉察日记
- 奇迹-妖妈|奇迹-妖妈 感恩日记46/365&非暴力沟通第3天
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- 数据技术|一文了解Gauss数据库(开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比)
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- gem|gem & pod 记录