java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)
1、条件match query查询
//条件查询match query
@Test
public void test10() throws UnknownHostException {
//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
//2.创建访问ES服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
//获取es主机中节点的ip地址及端口号(以下是单个节点案例)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
QueryBuilder builder = QueryBuilders.matchQuery("interests", "changge");
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for(SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
//将获取的值转换成map的形式
Map<String, Object> map = hit.getSourceAsMap();
for(String key:map.keySet()) {
System.out.println(key +" key对应的值为:" +map.get(key));
}
}
}
2、multimatch query查询
说明:查询的值在多个字段中进行匹配查询
//multiMatchQuery 查询的值在多个字段中进行匹配
@Test
public void test11() throws UnknownHostException {
//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
//2.创建访问ES服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
//获取es主机中节点的ip地址及端口号(以下是单个节点案例)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
//第一个参数是查询的值,后面的参数是字段名,可以跟多个字段,用逗号隔开
QueryBuilder builder = QueryBuilders.multiMatchQuery("changge", "address","interests");
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for(SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
//将获取的值转换成map的形式
Map<String, Object> map = hit.getSourceAsMap();
for(String key:map.keySet()) {
System.out.println(key +" key对应的值为:" +map.get(key));
}
}
}
3、term查询
说明:term查询是不支持分词查询的
//term查询
@Test
public void test12() throws UnknownHostException {
//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
//2.创建访问ES服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
//获取es主机中节点的ip地址及端口号(以下是单个节点案例)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
//term查询是不进行分词的
QueryBuilder builder = QueryBuilders.termQuery("interests", "changge");
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for(SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
//将获取的值转换成map的形式
Map<String, Object> map = hit.getSourceAsMap();
for(String key:map.keySet()) {
System.out.println(key +" key对应的值为:" +map.get(key));
}
}
}
term中文精确查询注意点:
当使用term查询中文时,比如查询"人类",我们是查不出来的,因为字段设置了ik分词器,他会将“人类”分成“人”和“类”,所有针对这种情况,我们需要将该字段类型临时转成keword类型,转换成后当字段中有"人类很好"的文章,我们也查询不出来,只会查询出字段为人类的文章。如下:
//term中文查询
@Test
public void test12() throws UnknownHostException {
//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
//2.创建访问ES服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
//获取es主机中节点的ip地址及端口号(以下是单个节点案例)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
//term查询是不进行分词的
QueryBuilder builder = QueryBuilders.termQuery("interests.keword", "人类");
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for(SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
//将获取的值转换成map的形式
Map<String, Object> map = hit.getSourceAsMap();
for(String key:map.keySet()) {
System.out.println(key +" key对应的值为:" +map.get(key));
}
}
}
4、terms查询
说明:与term的区别在于terms可以同时匹配多个条件
//terms查询:与term区别在于可以在同个字段中同时匹配多个条件,但是不支持分词
public void test13() throws UnknownHostException {
//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
//2.创建访问ES服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
//获取es主机中节点的ip地址及端口号(以下是单个节点案例)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
//terms查询是不进行分词的 与term的区别在terms可以指定一个字段匹配多个查询内容
QueryBuilder builder = QueryBuilders.termsQuery("interests", "changge","旅游");
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for(SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
//将获取的值转换成map的形式
Map<String, Object> map = hit.getSourceAsMap();
for(String key:map.keySet()) {
System.out.println(key +" key对应的值为:" +map.get(key));
}
}
}
5、reange 范围查询
//reange 范围查询(日期在多少之间等)
@Test
public void test14() throws UnknownHostException {
//1、指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
//2.创建访问ES服务器的客户端
TransportClient client = new PreBuiltTransportClient(settings)
//获取es主机中节点的ip地址及端口号(以下是单个节点案例)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.94"), 9300));
//rangeQurey 第一个参数为字段名,后面是范围 在设置日期格式
QueryBuilder builder = QueryBuilders.rangeQuery("birthday").from("1990-01-01").to("2000-10-10").format("yyyy-MM-dd");
SearchResponse response = client.prepareSearch("lib3").setQuery(builder).get();
SearchHits hits = response.getHits();
for(SearchHit hit:hits) {
System.out.println(hit.getSourceAsString());
//将获取的值转换成map的形式
Map<String, Object> map = hit.getSourceAsMap();
for(String key:map.keySet()) {
System.out.println(key +" key对应的值为:" +map.get(key));
}
}
}
下一篇博客本人将书写java操作elasticsearch实现前缀查询、wildcard模糊查询、fuzzy模糊查询、ids查询。对后期博客感兴趣的朋友可以关注交流,转发请说明出处,本人的博客地址为:https://www.cnblogs.com/chenyuanbo/
技术在于交流!
java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)的更多相关文章
- java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询
1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...
- java操作elasticsearch实现聚合查询
1.max 最大值 //max 求最大值 @Test public void test30() throws UnknownHostException{ //1.指定es集群 cluster.name ...
- java操作elasticsearch实现查询删除和查询所有
后期博客本人都只给出代码,具体的说明在代码中也有注释. 1.查询删除 //查询删除:将查询到的数据进行删除 @Test public void test8() throws UnknownHostEx ...
- java操作elasticsearch实现组合桶聚合
1.terms分组查询 //分组聚合 @Test public void test40() throws UnknownHostException{ //1.指定es集群 cluster.name 是 ...
- java操作elasticsearch实现query String
1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...
- java操作elasticsearch实现批量添加数据(bulk)
java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOExcepti ...
- java操作elasticsearch实现基本的增删改查操作
一.在进行java操作elasticsearch之前,请确认好集群的名称及对应的ES节点ip和端口 1.查看ES的集群名称 #进入elasticsearch.yml配置文件/opt/elasticse ...
- java使用elasticsearch进行模糊查询-已在项目中实际应用
java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...
- mongodb_查询操作使用_条件查询、where子句等(转)
<?php /* mongodb_查询操作使用_条件查询.where子句等(转并学习) 1.find()/findOne() mongodb数据库的查询操作即使用find()或者findO ...
随机推荐
- GNU C 与 ANSI C(上)
Linux 上可用的 C 编译器是 GNU C 编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布.GNU C 是对标准 C 进行的一系列扩展,以增强标准 C 的功能. 1. 零长度 ...
- Linux中安装Oracle11g后出现监听的问题及解决办法
软件安装: 参考文章: linux安装Oracle11G 错误如下: [oracle@iz2f570bi1k56uz admin]$ lsnrctl start LSNRCTL for Linux: ...
- C#获取某一路径下的所有文件名信息(包括子文件夹)
前言:初步梳理记录,以后慢慢总结更多的方法... 方法一:使用微软提供的方法:Dicrectory类中的:public static string[] GetFiles(string path, st ...
- [转]C#串口通信 SerialPort类
本文转自:https://blog.csdn.net/weixin_41415541/article/details/80921956 因为公司项目需要将USB扫码枪改为串口扫码枪,串口扫码的好处在于 ...
- vuex 、store、state (转载)
vuex 文档 https://vuex.vuejs.org/zh/guide/state.html
- sudo: cd: command not found
事件起因 今天在aws ubutun上忽然发现的一个问题,执行sudo cd 时出现 sudo: cd: command not found 原因 shell shell是一个命令解析器 所谓shel ...
- 异常: Bean named 'org.springframework.transaction.interceptor.TransactionInterceptor#0' is expected to be of type 'org.aopalliance.aop.Advice' but was actually of type 'org.springframework.transaction.i
场景: 在使用spring整合hibernate事务时报错解决: spring-aop中已经包含aopaliance,删除多余的jar包
- hihoCoder编程练习赛70
题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 ...
- BGP 优选短的AS号路径实践总结
BGP优选AS号短的路径作为首选路由的验证结果 1.结论: (1)EBGP会优选AS号少的路径作为转发路径,当优选路径失效时,再选择次选路由. (2)EBGP邻居建立在直连设备之间. (3)IBGP邻 ...
- leetcode-14最长公共前缀
leetcode-14最长公共前缀 题目 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower& ...