zoukankan      html  css  js  c++  java
  • ElasticSearch(五):Java操作ElasticSearch执行查询

      1 package com.gxy.ESChap01;
      2 
      3 import java.net.InetAddress;
      4 
      5 import org.elasticsearch.action.search.SearchRequestBuilder;
      6 import org.elasticsearch.action.search.SearchResponse;
      7 import org.elasticsearch.client.transport.TransportClient;
      8 import org.elasticsearch.common.settings.Settings;
      9 import org.elasticsearch.common.transport.InetSocketTransportAddress;
     10 import org.elasticsearch.index.query.QueryBuilder;
     11 import org.elasticsearch.index.query.QueryBuilders;
     12 import org.elasticsearch.search.SearchHit;
     13 import org.elasticsearch.search.SearchHits;
     14 import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
     15 import org.elasticsearch.search.sort.SortOrder;
     16 import org.elasticsearch.transport.client.PreBuiltTransportClient;
     17 import org.junit.After;
     18 import org.junit.Before;
     19 import org.junit.Test;
     20 
     21 public class ESQuery {
     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     @Before
     37     public void getClient() throws Exception {
     38         try {
     39             client = new PreBuiltTransportClient(settings)
     40                     .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host),port));
     41         } catch (Exception e) {
     42             // TODO Auto-generated catch block
     43             e.printStackTrace();
     44         }
     45     }
     46     
     47     //关闭客户端
     48     @After
     49     public void close() {
     50         if(client!=null) {
     51             client.close();
     52         }
     53     }
     54     
     55     /**
     56      * 查询所有
     57      */
     58     @Test
     59     public void searchAll() {
     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     @Test
     71     public void searchPaging() {
     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     @Test
     83     public void searchOrderBy() {
     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     @Test
     96     public void searchInclude() {
     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     @Test
    111     public void searchByCondition() {
    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     @Test
    126     public void searchHighlight() {
    127         SearchRequestBuilder srb=client.prepareSearch("film").setTypes("dongzuo");
    128         HighlightBuilder highlightBuilder=new HighlightBuilder();
    129         highlightBuilder.preTags("<h2>");
    130         highlightBuilder.postTags("</h2>");
    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      * 多条件查询  must
    145      */
    146     @Test
    147     public void searchMutil() {
    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      * 多条件查询  mustNot
    164      */
    165     @Test
    166     public void searchMutil2() {
    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      * @throws Exception
    184      */
    185     @Test
    186     public void searchMutil3()throws Exception{
    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     @Test
    206     public void searchMutil4() {
    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 }

  • 相关阅读:
    tab切换与表格展示
    ajax
    api
    slice() 方法
    iframe跳转
    快排序
    【问题排查】cpu占用过高排查
    LOJ6013 负载平衡 [最小费用最大流]
    随机序列 [思维题, 组合数]
    P1777 帮助 [状压dp]
  • 原文地址:https://www.cnblogs.com/guoxiangyue/p/9640186.html
Copyright © 2011-2022 走看看