elasticsearch 5 java_ElasticSearch(五):Java操作ElasticSearch执行查询

该博客展示了如何使用Java API与Elasticsearch进行交互,执行包括查询所有、分页查询、排序查询、数据列过滤、简单条件查询、高亮显示、多条件查询(must、mustNot、should及range限制范围)等操作。
摘要由CSDN通过智能技术生成

1 packagecom.gxy.ESChap01;2

3 importjava.net.InetAddress;4

5 importorg.elasticsearch.action.search.SearchRequestBuilder;6 importorg.elasticsearch.action.search.SearchResponse;7 importorg.elasticsearch.client.transport.TransportClient;8 importorg.elasticsearch.common.settings.Settings;9 importorg.elasticsearch.common.transport.InetSocketTransportAddress;10 importorg.elasticsearch.index.query.QueryBuilder;11 importorg.elasticsearch.index.query.QueryBuilders;12 importorg.elasticsearch.search.SearchHit;13 importorg.elasticsearch.search.SearchHits;14 importorg.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;15 importorg.elasticsearch.search.sort.SortOrder;16 importorg.elasticsearch.transport.client.PreBuiltTransportClient;17 importorg.junit.After;18 importorg.junit.Before;19 importorg.junit.Test;20

21 public classESQuery {22 private static String host="192.168.56.3"; //服务器地址

23 private static int port=9300; //端口

24

25 public static final String CLUSTER_NAME = "my-application"; //集群名称

26

27 private TransportClient client=null;28

29 private static Settings settings=Settings.builder()30 .put("cluster.name",CLUSTER_NAME)31 .put("client.transport.sniff", true)32 .build();33

34 //获取客户端

35 @SuppressWarnings({ "resource", "unchecked"})36 @Before37 public void getClient() throwsException {38 try{39 client = newPreBuiltTransportClient(settings)40 .addTransportAddress(newInetSocketTransportAddress(InetAddress.getByName(host),port));41 } catch(Exception e) {42 //TODO Auto-generated catch block

43 e.printStackTrace();44 }45 }46

47 //关闭客户端

48 @After49 public voidclose() {50 if(client!=null) {51 client.close();52 }53 }54

55 /**

56 * 查询所有57 */

58 @Test59 public voidsearchAll() {60 SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");61 SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();//查询所有

62 SearchHits hits=sr.getHits();63 for(SearchHit hit:hits) {64 System.out.println(hit.getSourceAsString());65 }66 }67 /**

68 * 分页查询69 */

70 @Test71 public voidsearchPaging() {72 SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");73 SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery()).setFrom(0).setSize(2).execute().actionGet();74 SearchHits hits=sr.getHits();75 for(SearchHit hit : hits) {76 System.out.println(hit.getSourceAsString());77 }78 }79 /**

80 * 排序查询81 */

82 @Test83 public voidsearchOrderBy() {84 SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");85 SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery())86 .addSort("publishDate",SortOrder.DESC).execute().actionGet();87 SearchHits hits=sr.getHits();88 for(SearchHit hit : hits) {89 System.out.println(hit.getSourceAsString());90 }91 }92 /**

93 * 数据列过滤查询94 */

95 @Test96 public voidsearchInclude() {97 SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");98 SearchResponse sr=srb.setQuery(QueryBuilders.matchAllQuery())99 .setFetchSource(new String[] {"title","price"},null)100 .execute()101 .actionGet();102 SearchHits hits=sr.getHits();103 for(SearchHit hit : hits) {104 System.out.println(hit.getSourceAsString());105 }106 }107 /***108 * 简单条件查询109 */

110 @Test111 public voidsearchByCondition() {112 SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");113 SearchResponse sr=srb.setQuery(QueryBuilders.matchQuery("title","铁"))114 .setFetchSource(new String[] {"title","price"},null)115 .execute()116 .actionGet();117 SearchHits hits=sr.getHits();118 for(SearchHit hit : hits) {119 System.out.println(hit.getSourceAsString());120 }121 }122 /**

123 * 条件查询高亮实现124 */

125 @Test126 public voidsearchHighlight() {127 SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");128 HighlightBuilder highlightBuilder=newHighlightBuilder();129 highlightBuilder.preTags("

");130 highlightBuilder.postTags("

");131 highlightBuilder.field("title");132 SearchResponse sr=srb.setQuery(QueryBuilders.matchQuery("title","战"))133 .highlighter(highlightBuilder)134 .setFetchSource(new String[] {"title","price"},null)135 .execute()136 .actionGet();137 SearchHits hits=sr.getHits();138 for(SearchHit hit : hits) {139 System.out.println(hit.getSourceAsString());140 System.out.println(hit.getHighlightFields());141 }142 }143 /**

144 * 多条件查询 must145 */

146 @Test147 public voidsearchMutil() {148 SearchRequestBuilder srb =client.prepareSearch("film").setTypes("dongzuo");149 QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");150 QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "星球");151 SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()152 .must(queryBuilder)153 .must(queryBuilder2))154 .execute()155 .actionGet();156 SearchHits hits=sr.getHits();157 for(SearchHit hit : hits) {158 System.out.println(hit.getSourceAsString());159 }160 }161

162 /**

163 * 多条件查询 mustNot164 */

165 @Test166 public voidsearchMutil2() {167 SearchRequestBuilder srb =client.prepareSearch("film").setTypes("dongzuo");168 QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");169 QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "武士");170 SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()171 .must(queryBuilder)172 .mustNot(queryBuilder2))173 .execute()174 .actionGet();175 SearchHits hits=sr.getHits();176 for(SearchHit hit : hits) {177 System.out.println(hit.getSourceAsString());178 }179 }180

181 /**

182 * 多条件查询 should提高得分183 *@throwsException184 */

185 @Test186 public void searchMutil3()throwsException{187 SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");188 QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");189 QueryBuilder queryBuilder2=QueryBuilders.matchPhraseQuery("content", "星球");190 QueryBuilder queryBuilder3=QueryBuilders.rangeQuery("publishDate").gt("2018-01-01");191 SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()192 .must(queryBuilder)193 .should(queryBuilder2)194 .should(queryBuilder3))195 .execute()196 .actionGet();197 SearchHits hits=sr.getHits();198 for(SearchHit hit:hits){199 System.out.println(hit.getScore()+":"+hit.getSourceAsString());200 }201 }202 /***203 * 多条件查询 range限制范围204 */

205 @Test206 public voidsearchMutil4() {207 SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");208 QueryBuilder queryBuilder=QueryBuilders.matchPhraseQuery("title", "战");209 QueryBuilder queryBuilder2=QueryBuilders.rangeQuery("price").lte(40);210 SearchResponse sr=srb.setQuery(QueryBuilders.boolQuery()211 .must(queryBuilder)212 .filter(queryBuilder2))213 .execute()214 .actionGet();215 SearchHits hits=sr.getHits();216 for(SearchHit hit : hits) {217 System.out.println(hit.getSourceAsString());218 }219 }220 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值