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 }