博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Elasticsearch——QueryBuilder简单查询
阅读量:6418 次
发布时间:2019-06-23

本文共 4037 字,大约阅读时间需要 13 分钟。

elasticsearch中存储的全部文档

1.matchAllQuery()

matchAllQuery()方法用来匹配全部文档

public class QueryTest {      public static void main(String[] args) {          //创建对象,设置集群名称和IP地址          ElasticsearchUtils es = new ElasticsearchUtils("im_shan",                  "localhost");          String indexName = "school";//索引名称          String typeName = "student";//类型名称          //搜索全部文档          QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();          SearchResponse searchResponse = es.searcher(indexName, typeName,              queryBuilder);          SearchHits hits = searchResponse.getHits();          SearchHit[] searchHits = hits.getHits();          int i = 0;          for (SearchHit searchHit : searchHits) {              String name = (String) searchHit.getSource().get("name");              String birth = (String) searchHit.getSource().get("birth");              String interest = (String) searchHit.getSource().get("interest");              System.out.println("-------------" + (++i) + "------------");              System.out.println(name);              System.out.println(birth);              System.out.println(interest);          }        }  }  

控制台将输出全部文档

输出:  -------------1------------  amy  1995-11-10  singing dancing  -------------2------------  angle  1996-05-01  singing reading  -------------3------------  jackson  1995-08-01  basketball music reading  -------------4------------  jack  1995-03-21  football music  -------------5------------  tom  1995-09-11  reading music  

2.matchQuery(String name,Object  text)

matchQuery("filedname","value")匹配单个字段,匹配字段名为filedname,值为value的文档

java] view plain copy //单个匹配,搜索name为jack的文档  QueryBuilder queryBuilder = QueryBuilders.matchQuery("name", "jack"); 

此时会输出一条记录,因为只有一个name为jack的文档

-------------1------------  jack  1995-03-21  football music 

 3.multiMatchQuery(Object text, String... fieldNames)

多个字段匹配某一个值

[java] view plain copy QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("music",             "name", "interest");//搜索name中或interest中包含有music的文档(必须与music一致)  

控制台输出如下

-------------1------------  jack  1995-03-21  football music  -------------2------------  tom  1995-09-11  reading music  -------------3------------  jackson  1995-08-01  basketball music reading  

4.wildcardQuery()模糊查询

模糊查询,?匹配单个字符,*匹配多个字符

WildcardQueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name",              "*jack*");//搜索名字中含有jack文档(name中只要包含jack即可)  

控制台输出如下

-------------1------------  jackson  1995-08-01  basketball music reading  -------------2------------  jack  1995-03-21  football music

 5.使用BoolQueryBuilder进行复合查询

使用must

java] view plain copy //模糊查询  WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(              "name", "*jack*");//搜索名字中含有jack的文档  WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(              "interest", "*read*");//搜索interest中含有read的文档    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();  //name中必须含有jack,interest中必须含有read,相当于and  boolQueryBuilder.must(queryBuilder1);  boolQueryBuilder.must(queryBuilder2);  

控制台输出如下(name中必须含有jack,interest中必须含有read,只有一条文档匹配):

-------------1------------  jackson  1995-08-01  basketball music reading  

使用should

WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery(              "name", "*jack*");//搜索名字中含有jack的文档  WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery(              "interest", "*read*");//搜索interest中含有read的文档    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();  //name中含有jack或者interest含有read,相当于or  boolQueryBuilder.should(queryBuilder1);  boolQueryBuilder.should(queryBuilder2);  

控制台输出(name中含有jack或者interest中含有read的都将被匹配):

------------1------------  jackson  1995-08-01  basketball music reading  -------------2------------  angle  1996-05-01  singing reading  -------------3------------  jack  1995-03-21  football music  -------------4------------  tom  1995-09-11  reading music

6.分页

通过from和size参数进行分页。From定义查询结果开始位置,size定义返回的hits(一条hit对应一条记录)最大数量。

 

转载于:https://www.cnblogs.com/sbj-dawn/p/8891419.html

你可能感兴趣的文章
MyBatis配置详解
查看>>
css的再深入8(更新中···)
查看>>
安卓新导入工程中gen目录下无R文件解决方法
查看>>
POJ 2245 Addition Chains(算竞进阶习题)
查看>>
时间分割与获取一下阶段时间
查看>>
案例解析|从数据规划、业务分析到管理决策的数据治理方案
查看>>
Laravel Controllers
查看>>
iOS开发-清理缓存功能的实现
查看>>
iOSpush过后返回多级界面
查看>>
[BZOJ1997/HNOI2010]平面图判定
查看>>
tensorflow学习
查看>>
request:通过表单手机客户机数据
查看>>
response发送状态码
查看>>
python-django(框架结构)
查看>>
常用dos命令
查看>>
跨线程调用DataGridView控件
查看>>
input框限制只能输入正整数,逻辑与和或运算
查看>>
【angularJS】定义模块angular.module
查看>>
Windows7+IIS7.5+PHP修改上传文件大小的解决方法
查看>>
java Bean的映射工具
查看>>