Elasticsearch系列(五)----JAVA客戶端之TransportClient操做詳解

Elasticsearch JAVA操做有三種客戶端:html

 

一、TransportClientjava

二、JestClientmysql

三、RestClient正則表達式

 

還有種是2.3中有的NodeClient,在5.5.1中好像沒有了。還有種是spring-data-elasticsearch,這裏先以TransportClient來說解CRUD,所用環境爲:算法

 

JDK1.8spring

ES5.5.1sql

TransportClient5.5.1apache

 

 

POM.XML文件以下:編程

 

[html]  view plain  copy
 
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.   <modelVersion>4.0.0</modelVersion>  
  4.   <groupId>com.fendo</groupId>  
  5.   <artifactId>TransportClient</artifactId>  
  6.   <packaging>war</packaging>  
  7.   <version>0.0.1-SNAPSHOT</version>  
  8.   <name>TransportClient Maven Webapp</name>  
  9.   <url>http://maven.apache.org</url>  
  10.     
  11.    <!-- 初始化框架的版本號 -->  
  12.     <properties>  
  13.         <spring.version>4.2.7.RELEASE</spring.version>  
  14.     </properties>  
  15.     
  16.   <dependencies>  
  17.   
  18.     <dependency>  
  19.         <groupId>junit</groupId>  
  20.         <artifactId>junit</artifactId>  
  21.         <version>4.12</version>  
  22.     </dependency>  
  23.   
  24.     <!-- 加入ServletAPI -->  
  25.     <dependency>  
  26.         <groupId>javax.servlet</groupId>  
  27.         <artifactId>javax.servlet-api</artifactId>  
  28.         <version>3.1.0</version>  
  29.         <scope>provided</scope>  
  30.     </dependency>  
  31.     <dependency>  
  32.             <groupId>org.hibernate</groupId>  
  33.             <artifactId>hibernate-validator</artifactId>  
  34.             <version>4.2.0.Final</version>  
  35.      </dependency>  
  36.           
  37.         <!-- MySQL依賴 start -->  
  38.         <dependency>  
  39.             <groupId>mysql</groupId>  
  40.             <artifactId>mysql-connector-java</artifactId>  
  41.             <version>5.1.38</version>  
  42.         </dependency>  
  43.   
  44.         <!-- MySQL依賴 end -->  
  45.           
  46.       
  47.         <!-- 加入MyBatis 依賴 start -->  
  48.         <dependency>  
  49.             <groupId>org.mybatis</groupId>  
  50.             <artifactId>mybatis</artifactId>  
  51.             <version>3.2.5</version>  
  52.         </dependency>  
  53.         <!-- 加入MyBatis 依賴 end -->  
  54.   
  55.         <!-- Log4j start -->  
  56.         <dependency>  
  57.             <groupId>log4j</groupId>  
  58.             <artifactId>log4j</artifactId>  
  59.             <version>1.2.17</version>  
  60.         </dependency>  
  61.   
  62.         <dependency>  
  63.             <groupId>org.apache.logging.log4j</groupId>  
  64.             <artifactId>log4j-1.2-api</artifactId>  
  65.             <version>2.7</version>  
  66.         </dependency>  
  67.       
  68.         <dependency>  
  69.             <groupId>org.apache.logging.log4j</groupId>  
  70.             <artifactId>log4j-slf4j-impl</artifactId>  
  71.             <version>2.7</version>  
  72.         </dependency>  
  73.           
  74.         <dependency>  
  75.             <groupId>org.apache.logging.log4j</groupId>  
  76.             <artifactId>log4j-core</artifactId>  
  77.             <version>2.7</version>  
  78.         </dependency>  
  79.           
  80.         <!-- Log4j end -->  
  81.   
  82.   
  83.         <!-- 引用c3p0 依賴 start-->  
  84.         <dependency>  
  85.             <groupId>com.mchange</groupId>  
  86.             <artifactId>c3p0</artifactId>  
  87.             <version>0.9.2.1</version>  
  88.         </dependency>  
  89.         <!-- 引用c3p0 依賴 end-->  
  90.   
  91.         <!-- 引用插件依賴:MyBatis整合Spring -->  
  92.         <dependency>  
  93.             <groupId>org.mybatis</groupId>  
  94.             <artifactId>mybatis-spring</artifactId>  
  95.             <version>1.3.0</version>  
  96.         </dependency>  
  97.       
  98.                 <!-- JSTL -->  
  99.         <dependency>    
  100.             <groupId>javax.servlet</groupId>    
  101.             <artifactId>jstl</artifactId>    
  102.             <version>1.2</version>    
  103.         </dependency>    
  104.             
  105.         <!--  -->  
  106.         <dependency>  
  107.             <groupId>com.fasterxml.jackson.core</groupId>  
  108.             <artifactId>jackson-core</artifactId>  
  109.             <version>2.9.0</version>  
  110.         </dependency>  
  111.         <dependency>  
  112.             <groupId>com.fasterxml.jackson.core</groupId>  
  113.             <artifactId>jackson-databind</artifactId>  
  114.             <version>2.9.0</version>  
  115.         </dependency>  
  116.         <dependency>  
  117.             <groupId>com.fasterxml.jackson.core</groupId>  
  118.             <artifactId>jackson-annotations</artifactId>  
  119.             <version>2.9.0</version>  
  120.         </dependency>  
  121.           
  122.   
  123.   
  124.     <dependency>  
  125.         <groupId>com.alibaba</groupId>  
  126.         <artifactId>fastjson</artifactId>  
  127.         <version>1.2.12</version>  
  128.     </dependency>  
  129.               
  130.               
  131.               
  132.     <!-- Elasticserach5 -->  
  133.     <dependency>  
  134.             <groupId>org.elasticsearch</groupId>  
  135.             <artifactId>elasticsearch</artifactId>  
  136.             <version>5.5.1</version>  
  137.         </dependency>  
  138.           
  139.           
  140.    <!--  <dependency>  
  141.             <groupId>org.elasticsearch.module</groupId>  
  142.             <artifactId>reindex</artifactId>  
  143.             <version>2.4.3</version>  
  144.         </dependency> -->  
  145.           
  146.           
  147.     <dependency>  
  148.               <groupId>com.google.collections</groupId>  
  149.           <artifactId>google-collections</artifactId>  
  150.            <version>1.0</version>  
  151.     </dependency>  
  152.           
  153.     <!-- transport客戶端 -->  
  154.     <dependency>  
  155.             <groupId>org.elasticsearch.client</groupId>  
  156.             <artifactId>transport</artifactId>  
  157.             <version>5.5.1</version>  
  158.         </dependency>  
  159.   
  160.     <!-- IK分詞器 -->  
  161.     <dependency>  
  162.             <groupId>org.elasticsearch</groupId>  
  163.             <artifactId>elasticsearch-analysis-ik</artifactId>  
  164.             <version>5.5.1</version>  
  165.         </dependency>  
  166.           
  167.   
  168.           
  169.   </dependencies>  
  170.     
  171.   <repositories>  
  172.         <repository>  
  173.             <id>spring-libs-snapshot</id>  
  174.             <name>Spring Snapshot Repository</name>  
  175.             <url>http://repo.spring.io/libs-snapshot</url>  
  176.         </repository>  
  177.         <repository>  
  178.             <id>elasticsearch-releases</id>  
  179.             <url>https://artifacts.elastic.co/maven</url>  
  180.             <releases>  
  181.                 <enabled>true</enabled>  
  182.             </releases>  
  183.             <snapshots>  
  184.                 <enabled>false</enabled>  
  185.             </snapshots>  
  186.         </repository>  
  187.     </repositories>  
  188.     
  189.   <build>  
  190.     <finalName>TransportClient</finalName>  
  191.          <plugins>  
  192.             <plugin>  
  193.                 <groupId>org.apache.maven.plugins</groupId>  
  194.                 <artifactId>maven-compiler-plugin</artifactId>  
  195.                 <configuration>  
  196.                     <source>1.8</source>  
  197.                     <target>1.8</target>  
  198.                 </configuration>  
  199.             </plugin>  
  200.         </plugins>  
  201.   </build>  
  202. </project>  

 

 

詳細代碼以下:json

 

[html]  view plain  copy
 
  1. package com.fendo.temp;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.File;  
  6. import java.io.FileReader;  
  7. import java.io.FileWriter;  
  8. import java.io.IOException;  
  9. import java.io.StringReader;  
  10. import java.net.InetAddress;  
  11. import java.net.UnknownHostException;  
  12. import java.text.SimpleDateFormat;  
  13. import java.util.ArrayList;  
  14. import java.util.Collection;  
  15. import java.util.Date;  
  16. import java.util.HashMap;  
  17. import java.util.HashSet;  
  18. import java.util.List;  
  19. import java.util.Map;  
  20. import java.util.Set;  
  21. import java.util.concurrent.ExecutionException;  
  22.   
  23. import org.elasticsearch.action.get.GetResponse;  
  24. import org.elasticsearch.action.get.MultiGetItemResponse;  
  25. import org.elasticsearch.action.get.MultiGetResponse;  
  26. import org.elasticsearch.index.query.MatchQueryBuilder;  
  27. import org.elasticsearch.action.ActionFuture;  
  28. import org.elasticsearch.action.admin.indices.analyze.AnalyzeRequest;  
  29. import org.elasticsearch.action.admin.indices.analyze.AnalyzeResponse;  
  30. import org.elasticsearch.script.Script;  
  31. import org.elasticsearch.script.ScriptType;  
  32. import org.elasticsearch.index.query.MultiMatchQueryBuilder;  
  33. import org.elasticsearch.index.query.MatchPhrasePrefixQueryBuilder;  
  34. import org.elasticsearch.index.query.MatchPhraseQueryBuilder;  
  35. import org.elasticsearch.action.search.MultiSearchResponse;  
  36. import org.apache.lucene.analysis.TokenStream;  
  37. import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;  
  38. import org.apache.lucene.search.join.ScoreMode;  
  39. import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;  
  40. import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;  
  41. import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;  
  42. import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;  
  43. import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;  
  44. import org.elasticsearch.action.bulk.BulkRequestBuilder;  
  45. import org.elasticsearch.action.bulk.BulkResponse;  
  46. import org.elasticsearch.action.delete.DeleteResponse;  
  47. import org.elasticsearch.action.index.IndexRequest;  
  48. import org.elasticsearch.action.index.IndexRequestBuilder;  
  49. import org.elasticsearch.action.index.IndexResponse;  
  50. import org.elasticsearch.action.search.SearchRequestBuilder;  
  51. import org.elasticsearch.action.search.SearchResponse;  
  52. import org.elasticsearch.action.search.SearchType;  
  53. import org.elasticsearch.action.update.UpdateRequest;  
  54. import org.elasticsearch.action.update.UpdateResponse;  
  55. import org.elasticsearch.client.Response;  
  56. import org.elasticsearch.client.transport.TransportClient;  
  57. import org.elasticsearch.common.settings.Settings;  
  58. import org.elasticsearch.common.transport.InetSocketTransportAddress;  
  59. import org.elasticsearch.common.unit.Fuzziness;  
  60. import org.elasticsearch.common.unit.TimeValue;  
  61. import org.elasticsearch.common.xcontent.XContentBuilder;  
  62. import org.elasticsearch.common.xcontent.XContentFactory;  
  63. import org.elasticsearch.index.query.BoolQueryBuilder;  
  64. import org.elasticsearch.index.query.QueryBuilder;  
  65. import org.elasticsearch.index.query.QueryBuilders;  
  66. import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;  
  67. import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;  
  68. import org.elasticsearch.search.SearchHit;  
  69. import org.elasticsearch.search.SearchHits;  
  70. import org.elasticsearch.search.aggregations.AggregationBuilder;  
  71. import org.elasticsearch.search.aggregations.AggregationBuilders;  
  72. import org.elasticsearch.search.aggregations.Aggregations;  
  73. import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;  
  74. import org.elasticsearch.search.aggregations.bucket.terms.Terms;  
  75. import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;  
  76. import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;  
  77. import org.elasticsearch.search.aggregations.metrics.sum.Sum;  
  78. import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;  
  79. import org.elasticsearch.search.sort.FieldSortBuilder;  
  80. import org.elasticsearch.search.sort.SortOrder;  
  81. import org.elasticsearch.transport.client.PreBuiltTransportClient;  
  82. import org.elasticsearch.action.bulk.BackoffPolicy;  
  83. import org.elasticsearch.action.bulk.BulkItemResponse;  
  84. import org.elasticsearch.action.bulk.BulkProcessor;  
  85. import org.elasticsearch.action.bulk.BulkRequest;  
  86. import org.elasticsearch.action.bulk.BulkResponse;  
  87. import org.elasticsearch.common.unit.ByteSizeUnit;  
  88. import org.elasticsearch.common.unit.ByteSizeValue;  
  89. import org.elasticsearch.common.unit.TimeValue;  
  90.   
  91. import org.wltea.analyzer.lucene.IKAnalyzer;  
  92. import org.joda.time.DateTime;  
  93. import org.junit.Before;  
  94. import org.junit.Test;  
  95.   
  96. import com.alibaba.fastjson.JSONObject;  
  97.   
  98.   
  99.   
  100. public class TransportClientTest {  
  101.   
  102.       
  103.     private TransportClient client;  
  104.       
  105.       
  106.     private final static String article="article";  
  107.     private final static String content="content";  
  108.       
  109.     @Before  
  110.     public void getClient() throws Exception{  
  111.         //設置集羣名稱  
  112.         Settings settings = Settings.builder().put("cluster.name", "my-application").build();// 集羣名  
  113.         //建立client  
  114.         client  = new PreBuiltTransportClient(settings)  
  115.                 .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));  
  116.     }  
  117.       
  118.     /**  
  119.      * -----------------------------------------增(建立索引,增長映射,新增文檔)  
  120.      */  
  121.       
  122.       
  123.     /**  
  124.      * 建立索引的四種方法  
  125.      */  
  126.       
  127.     @Test  
  128.     public void JSON(){  
  129.         String json = "{" +  
  130.                 "\"id\":\"kimchy\"," +  
  131.                 "\"postDate\":\"2013-01-30\"," +  
  132.                 "\"message\":\"trying out Elasticsearch\"" +  
  133.             "}";  
  134.   
  135.     }  
  136.       
  137.     /**  
  138.      * 建立索引並添加映射  
  139.      * @throws IOException   
  140.      */  
  141.     @Test  
  142.     public void CreateIndexAndMapping() throws Exception{  
  143.                   
  144.         CreateIndexRequestBuilder  cib=client.admin().indices().prepareCreate(article);  
  145.             XContentBuilder mapping = XContentFactory.jsonBuilder()  
  146.                     .startObject()  
  147.                         .startObject("properties") //設置之定義字段  
  148.                           .startObject("author")  
  149.                             .field("type","string") //設置數據類型  
  150.                           .endObject()  
  151.                           .startObject("title")  
  152.                              .field("type","string")  
  153.                           .endObject()  
  154.                           .startObject("content")  
  155.                              .field("type","string")  
  156.                           .endObject()  
  157.                           .startObject("price")  
  158.                              .field("type","string")  
  159.                           .endObject()  
  160.                           .startObject("view")  
  161.                              .field("type","string")  
  162.                           .endObject()  
  163.                           .startObject("tag")  
  164.                              .field("type","string")  
  165.                           .endObject()  
  166.                           .startObject("date")  
  167.                              .field("type","date")  //設置Date類型  
  168.                              .field("format","yyyy-MM-dd HH:mm:ss") //設置Date的格式  
  169.                           .endObject()  
  170.                       .endObject()  
  171.                     .endObject();  
  172.             cib.addMapping(content, mapping);  
  173.               
  174.             CreateIndexResponse res=cib.execute().actionGet();  
  175.               
  176.             System.out.println("----------添加映射成功----------");  
  177.     }  
  178.       
  179.     /**  
  180.      *  建立索引並添加文檔  
  181.      * @throws Exception  
  182.      */  
  183.     @Test  
  184.     public void addIndexAndDocument() throws Exception{  
  185.                   
  186.         Date time = new Date();  
  187.   
  188.         IndexResponse response = client.prepareIndex(article, content)  
  189.         .setSource(XContentFactory.jsonBuilder().startObject()  
  190.         .field("id","447")  
  191.         .field("author","fendo")  
  192.         .field("title","192.138.1.2")  
  193.         .field("content","這是JAVA有關的書籍")  
  194.         .field("price","20")  
  195.         .field("view","100")  
  196.         .field("tag","a,b,c,d,e,f")  
  197.         .field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time))  
  198.         .endObject())  
  199.         .get();  
  200.         System.out.println("添加索引成功,版本號:"+response.getVersion());  
  201.     }  
  202.       
  203.   
  204.     /**  
  205.      * -------------------------------------Bulk---------------------------------  
  206.      */  
  207.       
  208.       
  209.     /**  
  210.      * bulkRequest  
  211.      * @throws Exception  
  212.      */  
  213.     @Test  
  214.     public void bulkRequest() throws Exception {  
  215.         BulkRequestBuilder bulkRequest = client.prepareBulk();  
  216.   
  217.         Date time = new Date();  
  218.           
  219.         // either use client#prepare, or use Requests# to directly build index/delete requests  
  220.         bulkRequest.add(client.prepareIndex(article, content, "199")  
  221.                 .setSource(XContentFactory.jsonBuilder()  
  222.                         .startObject()  
  223.                         .field("id","199")  
  224.                         .field("author","fendo")  
  225.                         .field("title","BULK")  
  226.                         .field("content","這是BULK有關的書籍")  
  227.                         .field("price","40")  
  228.                         .field("view","300")  
  229.                         .field("tag","a,b,c")  
  230.                         .field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time))  
  231.                         .endObject()  
  232.                 )  
  233.         );  
  234.   
  235.         bulkRequest.add(client.prepareIndex(article,content, "101")  
  236.                 .setSource(XContentFactory.jsonBuilder()  
  237.                         .startObject()  
  238.                         .field("id","101")  
  239.                         .field("author","fendo")  
  240.                         .field("title","ACKSE")  
  241.                         .field("content","這是ACKSE有關的書籍")  
  242.                         .field("price","50")  
  243.                         .field("view","200")  
  244.                         .field("tag","a,b,c")  
  245.                         .field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time))  
  246.                         .endObject()  
  247.                 )  
  248.         );  
  249.   
  250.         BulkResponse bulkResponse = bulkRequest.get();  
  251.         if (bulkResponse.hasFailures()) {  
  252.             // process failures by iterating through each bulk response item  
  253.             //System.out.println(bulkResponse.getTook());  
  254.         }  
  255.     }  
  256.       
  257.       
  258.       
  259.     /**設置自動提交文檔  
  260.      * BulkProcessor  
  261.      * @throws Exception  
  262.      */  
  263.     @Test  
  264.     public void autoBulkProcessor() throws Exception {  
  265.           
  266.         BulkProcessor bulkProcessor = BulkProcessor.builder(client,  
  267.         new BulkProcessor.Listener() {  
  268.             @Override  
  269.             public void beforeBulk(long executionId,  
  270.                                    BulkRequest request) {  
  271.                 //提交前調用  
  272.       
  273.             }  
  274.       
  275.             @Override  
  276.             public void afterBulk(long executionId,  
  277.                                   BulkRequest request,  
  278.                                   BulkResponse response) {  
  279.                 //提交結束後調用(不管成功或失敗)  
  280.                 System.out.println( "提交" + response.getItems().length + "個文檔,用時"+ response.getTookInMillis() + "MS" + (response.hasFailures() ? " 有文檔提交失敗!" : ""));  
  281.       
  282.             }  
  283.       
  284.             @Override  
  285.             public void afterBulk(long executionId,  
  286.                                   BulkRequest request,  
  287.                                   Throwable failure) {  
  288.                  //提交結束且失敗時調用  
  289.                  System.out.println( " 有文檔提交失敗!after failure=" + failure);  
  290.       
  291.             }  
  292.         })  
  293.         //當請求超過10000個(default=1000)或者總大小超過1GB(default=5MB)時,觸發批量提交動做。  
  294.         .setBulkActions(10000)//文檔數量達到1000時提交  
  295.         .setBulkSize(new ByteSizeValue(5, ByteSizeUnit.MB))//總文檔體積達到5MB時提交   
  296.         .setFlushInterval(TimeValue.timeValueSeconds(5))//每5S提交一次(不管文檔數量、體積是否達到閾值)  
  297.         .setConcurrentRequests(1)//加1後爲可並行的提交請求數,即設爲0表明只可1個請求並行,設爲1爲2個並行  
  298.         .setBackoffPolicy(  
  299.                 BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3))  
  300.         .build();  
  301.           
  302.         //提交單個  
  303.         //String json = "{\"id\":\"66\",\"author\":\"ckse\",\"title\":\"windows編程\",\"content\":\"windows 32 API編程\",\"price\":\"99\",\"view\":\"222\",\"date\":\"2017-08-01 17:21:18\"}";  
  304.         //bulkProcessor.add(new IndexRequest("設置的index name", "設置的type name","要插入的文檔的ID").source(json));//添加文檔,以便自動提交  
  305.          for(int i=0;i<80080;i++){  
  306.               //業務對象  
  307.               String json = "{\"id\":\""+i+"\",\"author\":\"ckse\",\"title\":\"windows編程\",\"content\":\"windows 32 API編程\",\"price\":\"99\",\"view\":\"222\",\"date\":\"2017-08-01 17:21:18\"}";  
  308.               System.out.println(json);  
  309.               bulkProcessor.add(new IndexRequest("article", "content",""+i).source(json));//添加文檔,以便自動提交  
  310.   
  311.          }  
  312.            
  313.          System.out.println("建立成功!!!");  
  314.   
  315.     }  
  316.       
  317.     //手動 批量更新  
  318.     @Test  
  319.     public void multipleBulkProcessor() throws Exception {  
  320.   
  321.          BulkRequestBuilder bulkRequest = client.prepareBulk();  
  322.          for(int i=500;i<1000;i++){  
  323.               //業務對象  
  324.               String jsons = "{\"id\":\""+i+"\",\"author\":\"ckse\",\"title\":\"windows編程\",\"content\":\"windows 32 API編程\",\"price\":\"99\",\"view\":\"222\",\"date\":\"2017-08-01 17:21:18\"}";  
  325.               IndexRequestBuilder indexRequest = client.prepareIndex("article", "content")  
  326.                       //指定不重複的ID  
  327.                       .setSource(jsons).setId(String.valueOf(i));  
  328.               //添加到builder中  
  329.               bulkRequest.add(indexRequest);  
  330.          }  
  331.          BulkResponse bulkResponse = bulkRequest.execute().actionGet();  
  332.          if (bulkResponse.hasFailures()) {  
  333.               // process failures by iterating through each bulk response item  
  334.               System.out.println(bulkResponse.buildFailureMessage());  
  335.          }  
  336.          System.out.println("建立成功!!!");   
  337.     }  
  338.       
  339.     /**  
  340.      * 使用Bulk批量添加導入數據  
  341.      *   
  342.      */  
  343.     @Test  
  344.     public void ImportBulk(){  
  345.         FileReader fr = null;  
  346.         BufferedReader bfr = null;  
  347.         String line=null;  
  348.         try {  
  349.                 File file = new File("F:\\Source\\Elasticsearch\\TransportClient\\src\\main\\resources\\bulk.txt");  
  350.                 fr=new FileReader(file);  
  351.                 bfr=new BufferedReader(fr);  
  352.                 BulkRequestBuilder bulkRequest=client.prepareBulk();  
  353.                 int count=0;  
  354.                 while((line=bfr.readLine())!=null){  
  355.                     bulkRequest.add(client.prepareIndex(article,content).setSource(line));  
  356.                     if (count%10==0) {  
  357.                         bulkRequest.execute().actionGet();  
  358.                     }  
  359.                     count++;  
  360.                 }  
  361.                 bulkRequest.execute().actionGet();  
  362.                 System.out.println("導入成功!!!");  
  363.         } catch (Exception e) {  
  364.                 e.printStackTrace();  
  365.         }finally {  
  366.             try {  
  367.                 bfr.close();  
  368.                 fr.close();  
  369.             } catch (IOException e) {  
  370.                 e.printStackTrace();  
  371.             }  
  372.         }  
  373.     }  
  374.       
  375.       
  376.     /**  
  377.      * 使用Bulk批量導出數據  
  378.      * @throws ExecutionException   
  379.      * @throws InterruptedException   
  380.      */  
  381.     @Test  
  382.     public void ExportBulk() throws Exception{  
  383.           
  384.       
  385.         QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();  
  386.         SearchResponse response = client.prepareSearch("article").setQuery(queryBuilder).get();  
  387.           
  388.         SearchHits resultHits = response.getHits();  
  389.   
  390.         System.out.println(JSONObject.toJSON(resultHits));  
  391.           
  392.         FileWriter fw=null;  
  393.         BufferedWriter bfw =null;  
  394.         try {  
  395.             File file = new File("F:\\Source\\Elasticsearch\\TransportClient\\src\\main\\resources\\bulk.txt");  
  396.             fw = new FileWriter(article);  
  397.             bfw = new BufferedWriter(fw);  
  398.   
  399.             if (resultHits.getHits().length == 0) {  
  400.                 System.out.println("查到0條數據!");  
  401.   
  402.             } else {  
  403.                 for (int i = 0; i resultHits.getHits().length; i++) {  
  404.                     String jsonStr = resultHits.getHits()[i]  
  405.                             .getSourceAsString();  
  406.                     System.out.println(jsonStr);  
  407.                     bfw.write(jsonStr);  
  408.                     bfw.write("\n");  
  409.                 }  
  410.             }  
  411.         } catch (Exception e) {  
  412.            e.printStackTrace();  
  413.         }finally {  
  414.             try {  
  415.                 bfw.close();  
  416.                 fw.close();  
  417.             } catch (IOException e) {  
  418.                 e.printStackTrace();  
  419.             }  
  420.         }  
  421.     }  
  422.       
  423.       
  424.     /**  
  425.      * -----------------------------------------刪(刪除索引,刪除文檔)  
  426.      */  
  427.       
  428.       
  429.     /**  
  430.      * 刪除整個索引庫  
  431.      */  
  432.     @Test  
  433.     public void deleteAllIndex(){  
  434.           
  435.         String indexName="article";  
  436.           
  437.         /**  
  438.          * 兩種方式以下:  
  439.          */  
  440.           
  441.         //1)  
  442.         //能夠根據DeleteIndexResponse對象的isAcknowledged()方法判斷刪除是否成功,返回值爲boolean類型.  
  443.         DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(indexName)  
  444.                 .execute().actionGet();  
  445.         System.out.println("是否刪除成功:"+dResponse.isAcknowledged());  
  446.   
  447.           
  448.         //2)  
  449.         //若是傳人的indexName不存在會出現異常.能夠先判斷索引是否存在:  
  450.         IndicesExistsRequest inExistsRequest = new IndicesExistsRequest(indexName);  
  451.           
  452.         IndicesExistsResponse inExistsResponse = client.admin().indices()  
  453.                 .exists(inExistsRequest).actionGet();  
  454.           
  455.         //根據IndicesExistsResponse對象的isExists()方法的boolean返回值能夠判斷索引庫是否存在.  
  456.         System.out.println("是否刪除成功:"+inExistsResponse.isExists());  
  457.     }  
  458.       
  459.   
  460.     /**  
  461.      * 經過ID刪除  
  462.      */  
  463.     @Test  
  464.     public void deleteById(){  
  465.         DeleteResponse dResponse = client.prepareDelete(article,content, "AV49wyfCWmWw7AxKFxeb").execute().actionGet();  
  466.         if ("OK".equals(dResponse.status())) {  
  467.             System.out.println("刪除成功");  
  468.         } else {  
  469.             System.out.println("刪除失敗");  
  470.         }  
  471.     }  
  472.       
  473.       
  474.     /**  
  475.      * 經過Query delete刪除  
  476.      */  
  477.     @Test  
  478.     public void queryDelete() {  
  479. //         String guid="AV49wyfCWmWw7AxKFxeb";  
  480. //         String author="kkkkk";  
  481. //         DeleteByQueryAction.INSTANCE.newRequestBuilder(client)  
  482. //               .source(article)  
  483. //               .filter(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("id", guid)).must(QueryBuilders.termQuery("author", author)).must(QueryBuilders.typeQuery(content)))  
  484. //               .get();  
  485.     }  
  486.       
  487.       
  488.     /**  
  489.      * 使用matchAllQuery刪除全部文檔  
  490.      */  
  491.     @Test  
  492.     public void deleteAll(){  
  493. //         DeleteByQueryAction.INSTANCE.newRequestBuilder(client)  
  494. //           .source(article)  
  495. //           .filter(QueryBuilders.matchAllQuery())  
  496. //           .get();  
  497.     }  
  498.       
  499.       
  500.     /**  
  501.      * bulk批量經過指定id刪除方法  
  502.      */  
  503.     @Test  
  504.     public void batchUndercarriageFamilies() {  
  505.        List<StringpublishIds=new ArrayList<>();  
  506.        publishIds.add("AV49wyfCWmWw7AxKFxeY");  
  507.        publishIds.add("AV49wyfCWmWw7AxKFxea");  
  508.        BulkRequestBuilder builder=client.prepareBulk();  
  509.        for(String publishId:publishIds){  
  510.           System.out.println(publishId);  
  511.           builder.add(client.prepareDelete(article, content, publishId).request());  
  512.             
  513.        }  
  514.        BulkResponse bulkResponse = builder.get();  
  515.        System.out.println(bulkResponse.status());  
  516.     }  
  517.       
  518.       
  519.   
  520.       
  521.     /**  
  522.      * -----------------------------------------改()  
  523.      */  
  524.       
  525.       
  526.     /**  
  527.      * 更新文檔  
  528.      * @throws Exception  
  529.      */  
  530.     @Test  
  531.     public void updateDocument() throws Exception{  
  532.           
  533.         Date time = new Date();  
  534.   
  535.         //建立修改請求  
  536.         UpdateRequest updateRequest = new UpdateRequest();  
  537.         updateRequest.index(article);  
  538.         updateRequest.type(content);  
  539.         updateRequest.id("AV4xv5gAZLX8AvCc6ZWZ");  
  540.         updateRequest.doc(XContentFactory.jsonBuilder()  
  541.         .startObject()  
  542.         .field("author","FKSE")  
  543.         .field("title","JAVA思想")  
  544.         .field("content","注意:這是JAVA有關的書籍")  
  545.         .field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time))  
  546.         .endObject());  
  547.           
  548.         UpdateResponse response = client.update(updateRequest).get();  
  549.         System.out.println("更新索引成功");  
  550.     }  
  551.       
  552.       
  553.       
  554.     /**  
  555.      * -----------------------------有問題:要引入:reindex  
  556.      */  
  557.       
  558.       
  559.     /**  
  560.      * UpdateByQueryRequestBuilder  
  561.      * @throws Exception  
  562.      */  
  563.     @Test  
  564.     public void updateByQueryRequestBuilder() throws Exception {  
  565. //        UpdateByQueryRequestBuilder updateByQueryRequestBuilder = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);  
  566. //        updateByQueryRequestBuilder  
  567. //                .script(new Script(ScriptType.INLINE,"painless","ctx_source.likes++",null))  
  568. //                .source()  
  569. //                .setQuery(QueryBuilders.termQuery("author","kkkkk"))  
  570. //                .setIndices(article)  
  571. //                .get();  
  572.     }  
  573.       
  574.       
  575.     /**  
  576.      * updateByQueryRequestBuilders  
  577.      */  
  578.     @Test  
  579.     public void updateByQueryRequestBuilders(){  
  580.           
  581. //      Map<String, Objectmaps=new HashMap<>();  
  582. //      maps.put("orgin_session_id", 10);  
  583. //      maps.put("orgin_session_id", 11);  
  584. //      maps.put("orgin_session_id", 12);  
  585. //      maps.put("orgin_session_id", 13);  
  586. //        
  587. //      Set<Map<String, Object>docs = new HashSet<>();  
  588. //      docs.add(maps);  
  589. //        
  590. //      UpdateByQueryRequestBuilder  ubqrb = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);  
  591. //        for (Map<String, Object> doc : docs) {  
  592. //            if (doc==null || doc.isEmpty()){  
  593. //                return;  
  594. //            }  
  595. //            Script script = new Script("ctx._source.price = ctx._version");  
  596. //              
  597. //            System.out.println(doc.get("orgin_session_id"));  
  598. //              
  599. //            //BulkIndexByScrollResponse  
  600. //            BulkByScrollResponse scrollResponse = ubqrb.source(article).script(script)  
  601. //                            .filter(QueryBuilders.matchAllQuery()).get();  
  602. //            for (BulkItemResponse.Failure failure : scrollResponse.getBulkFailures()) {  
  603. //              System.out.println(failure.getMessage());  
  604. //            }  
  605. //        }  
  606.     }  
  607.       
  608.     /**  
  609.      * prepareUpdate  
  610.      * @throws Exception  
  611.      */  
  612.     @Test  
  613.     public void prepareUpdate() throws Exception {  
  614.           
  615.         XContentBuilder endObject = XContentFactory.jsonBuilder().startObject().field("author","AAAAAAAAAAAAAAA").endObject();  
  616.         UpdateResponse response = client.prepareUpdate(article, content, "AV49wyfCWmWw7AxKFxeb").setDoc(endObject).get();  
  617.         System.out.println(response.getVersion());  
  618.           
  619.     }  
  620.       
  621.       
  622.     /**  
  623.      * -----------------------------------------查()  
  624.      */  
  625.       
  626.       
  627.       
  628.     /**  
  629.      * 根據index、type、id進行查詢  
  630.      */  
  631.     @Test  
  632.     public void searchByIndex(){  
  633.           
  634.         GetResponse response = client.prepareGet(article,content,"AV49wyfCWmWw7AxKFxec").execute()    
  635.                 .actionGet();    
  636.         String json = response.getSourceAsString();    
  637.         if (null != json) {    
  638.             System.out.println(json);  
  639.         } else {    
  640.             System.out.println("未查詢到任何結果!");    
  641.         }    
  642.     }  
  643.       
  644.       
  645.     /**  
  646.      * 查詢article索引下的全部數據   
  647.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-query-dsl-match-all-query.html'>  
  648.      * @throws Exception  
  649.      */  
  650.     @Test  
  651.     public  void matchAllQuery() throws Exception{  
  652.         QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();  
  653.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  654.         for (SearchHit searchHit : response.getHits()) {  
  655.             println(searchHit);  
  656.         }  
  657.     }  
  658.       
  659.       
  660.     /**  
  661.      * 查詢article索引下的articledate的全部數據   
  662.      * @throws Exception  
  663.      */  
  664.     @Test  
  665.     public void searchmethod1() throws Exception{  
  666.         SearchResponse response = client.prepareSearch(article).setTypes(content).get();  
  667.         println(response);  
  668.         for (SearchHit  searchHit: response.getHits()) {  
  669.             println(searchHit);  
  670.         }  
  671.     }  
  672.       
  673.     /**  
  674.      * spanFirstQuery  
  675.      */  
  676.     @Test  
  677.     public void spanFirstQuery(){  
  678.           
  679.          // Span First    
  680.         QueryBuilder queryBuilder =QueryBuilders.spanFirstQuery(    
  681.                 QueryBuilders.spanTermQuery("title", "C"),  // Query    
  682.                 30000                                             // Max查詢範圍的結束位置    
  683.         );  
  684.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  685.         for (SearchHit searchHit : response.getHits()) {  
  686.             println(searchHit);  
  687.         }  
  688.     }  
  689.       
  690.       
  691.     /**  
  692.      * spanNearQuery  
  693.      */  
  694.     @Test  
  695.     public void spanNearQuery(){  
  696.             
  697.         // Span Near TODO NotSolved    
  698.         QueryBuilder queryBuilder =QueryBuilders.spanNearQuery(QueryBuilders.spanTermQuery("title", "C"),1000)    
  699.                 .addClause(QueryBuilders.spanTermQuery("name", "葫蘆580娃")) // Span Term Queries    
  700.                 .addClause(QueryBuilders.spanTermQuery("name", "葫蘆3812娃"))    
  701.                 .addClause(QueryBuilders.spanTermQuery("name", "葫蘆7139娃"));  
  702.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  703.         for (SearchHit searchHit : response.getHits()) {  
  704.             println(searchHit);  
  705.         }  
  706.     }  
  707.       
  708.     /**  
  709.      * spanNotQuery  
  710.      */  
  711.     @Test  
  712.     public void spanNotQuery(){  
  713.          // Span Not TODO NotSolved    
  714.         QueryBuilder queryBuilder =QueryBuilders.spanNotQuery(QueryBuilders.spanTermQuery("title", "C"), null);    
  715.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  716.         for (SearchHit searchHit : response.getHits()) {  
  717.             println(searchHit);  
  718.         }  
  719.     }  
  720.       
  721.     /**  
  722.      * spanOrQuery  
  723.      */  
  724.     @Test  
  725.     public void spanOrQuery(){  
  726.         QueryBuilder queryBuilder =QueryBuilders.spanOrQuery(QueryBuilders.spanTermQuery("title", "C"));  
  727.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  728.         for (SearchHit searchHit : response.getHits()) {  
  729.             println(searchHit);  
  730.         }  
  731.     }  
  732.       
  733.       
  734.     public void moreLikeThisQuery(){  
  735.   
  736.     }  
  737.       
  738.      /**  
  739.      * 指定單查詢條件  
  740.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-full-text-queries.html#java-query-dsl-simple-query-string-query'>  
  741.      * @throws Exception  
  742.      */  
  743.     @Test  
  744.     public  void matchQuery() throws Exception{  
  745.         QueryBuilder qb = QueryBuilders.matchQuery(  
  746.                 "title" ,   
  747.                 "C"     
  748.             );  
  749.         SearchResponse response = client.prepareSearch(article).setQuery(qb).get();  
  750.         for (SearchHit searchHit : response.getHits()) {  
  751.             println(searchHit);  
  752.         }  
  753.     }  
  754.       
  755.       
  756.   
  757.       
  758.     /**  
  759.      * termQuery 查詢  
  760.      * @throws Exception  
  761.      */  
  762.     @Test  
  763.     public void termQuery() throws Exception{  
  764.   
  765.         QueryBuilder queryBuilder = QueryBuilders.termQuery("id","11");  
  766.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  767.         for (SearchHit  searchHit: response.getHits()) {  
  768.             println(searchHit);  
  769.         }  
  770.     }  
  771.   
  772.     /**  
  773.      * termQuery 查詢  
  774.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  775.      * @throws Exception  
  776.      */  
  777.     @Test  
  778.     public  void termsQuerys() throws Exception{  
  779.         QueryBuilder queryBuilder = QueryBuilders.termsQuery("id","1","2");      
  780.         SearchResponse response = client.prepareSearch("article").setQuery(queryBuilder).get();  
  781.         for (SearchHit  searchHit: response.getHits()) {  
  782.             println(searchHit);  
  783.         }  
  784.     }  
  785.       
  786.      /**  
  787.      * 範圍查詢RangeQuery  
  788.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  789.      * @throws Exception  
  790.      */  
  791.     @Test  
  792.     public void rangeQuery() throws Exception{  
  793.         QueryBuilder queryBuilder = QueryBuilders.rangeQuery("price")     
  794.                 .from(1)                              
  795.                 .to(100)                               
  796.                 .includeLower(false)                   
  797.                 .includeUpper(false);  
  798.         // A simplified form using gte, gt, lt or lte  
  799.         QueryBuilder _qb = QueryBuilders.rangeQuery("price")     
  800.             .gte("10")                          
  801.             .lt("20");  
  802.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  803.         for (SearchHit  searchHit: response.getHits()) {  
  804.             println(searchHit);  
  805.         }  
  806.     }  
  807.       
  808.       
  809.     /**  
  810.      * multiMatchQuery 查詢    
  811.      * multiMatchQuery針對的是多個field,當fieldNames有多個參數時,如field1和field2,那查詢的結果中,要麼field1中包含text,要麼field2中包含text。  
  812.      */  
  813.     @Test  
  814.     public void multiMatchQuery(){  
  815.         QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("JAVA編程思想","title", "content");  
  816.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  817.         for (SearchHit  searchHit: response.getHits()) {  
  818.             println(searchHit);  
  819.         }     
  820.     }  
  821.       
  822.     /**  
  823.      * MultiMatchQueryBuilder  
  824.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-full-text-queries.html#java-query-dsl-simple-query-string-query'>  
  825.      * @throws Exception  
  826.      */  
  827.     @Test  
  828.     public void MultiMatchQueryBuilder() throws Exception {  
  829.         MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("JAVA編程思想","title", "content");  
  830.   
  831.         multiMatchQueryBuilder.analyzer("standard");  
  832.         multiMatchQueryBuilder.cutoffFrequency(0.001f);  
  833.         multiMatchQueryBuilder.field("title",20);  
  834.         multiMatchQueryBuilder.fuzziness(Fuzziness.TWO);  
  835.         multiMatchQueryBuilder.maxExpansions(100);  
  836.         multiMatchQueryBuilder.prefixLength(10);  
  837.         multiMatchQueryBuilder.tieBreaker(20);  
  838.         multiMatchQueryBuilder.type(MultiMatchQueryBuilder.Type.BEST_FIELDS);  
  839.         multiMatchQueryBuilder.boost(20);  
  840.   
  841.   
  842.   
  843.        SearchResponse searchResponse =  client.prepareSearch()  
  844.                 .setIndices(article)  
  845.                 .setTypes(content)  
  846.                 .setQuery(multiMatchQueryBuilder)  
  847.                 .execute()  
  848.                 .actionGet();  
  849.   
  850.        for (SearchHit  searchHit: searchResponse.getHits()) {  
  851.            println(searchHit);  
  852.        }      
  853.     }  
  854.       
  855.       
  856.     /**  
  857.      * MatchQueryBuilder  
  858.      * @throws Exception  
  859.      */  
  860.     @Test  
  861.     public void MatchQueryBuilder() throws Exception {  
  862.           
  863.         MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title","JAVA編程思想");  
  864.         matchQueryBuilder.fuzziness(Fuzziness.AUTO);  
  865.         SearchResponse searchResponse = client.prepareSearch()  
  866.                 .setIndices(article)  
  867.                 .setTypes(content)  
  868.                 .setQuery(matchQueryBuilder)  
  869.                 .execute()  
  870.                 .actionGet();  
  871.         println(searchResponse);  
  872.     }  
  873.       
  874.       
  875.      /**  
  876.      * 和matchQuery同樣  
  877.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-full-text-queries.html#java-query-dsl-simple-query-string-query'>  
  878.      * @throws Exception  
  879.      */  
  880.     @Test  
  881.     public  void commonTermsQuery() throws Exception{  
  882.         QueryBuilder queryBuilder = QueryBuilders.commonTermsQuery("id",      
  883.                 "1");  
  884.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  885.         for (SearchHit  searchHit: response.getHits()) {  
  886.             println(searchHit);  
  887.         }     
  888.     }  
  889.       
  890.       
  891.     /**  
  892.      * MultiGetResponse  查詢多個xxx的值  
  893.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-multi-get.html'>  
  894.      * @throws Exception  
  895.      */  
  896.     @Test  
  897.     public void MultiGetResponse() throws Exception {  
  898.         MultiGetResponse multiGetItemResponses = client.prepareMultiGet()  
  899.                 .add(article, content, "526")  
  900.                 .add(article, content, "572", "582", "613")  
  901.                 .get();  
  902.         for (MultiGetItemResponse itemResponse : multiGetItemResponses) {  
  903.             GetResponse response = itemResponse.getResponse();  
  904.             if (response.isExists()) {  
  905.                 String json = response.getSourceAsString();  
  906.                 System.out.println(json);  
  907.             }  
  908.         }  
  909.     }  
  910.       
  911.     /**  
  912.      * +包含 -除外  
  913.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-full-text-queries.html#java-query-dsl-simple-query-string-query'>  
  914.      * @throws Exception  
  915.      */  
  916.     @Test  
  917.     public void queryStringQuery() throws Exception{  
  918.         QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("*:*");         
  919.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  920.         for (SearchHit  searchHit: response.getHits()) {  
  921.             println(searchHit);  
  922.         }     
  923.     }  
  924.       
  925.     /**  
  926.      * +包含 -除外  
  927.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-full-text-queries.html#java-query-dsl-simple-query-string-query'>  
  928.      * @throws Exception  
  929.      */  
  930.     @Test  
  931.     public void simpleQueryStringQuery() throws Exception{  
  932.         QueryBuilder queryBuilder = QueryBuilders.simpleQueryStringQuery("+id:1");           
  933.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  934.         for (SearchHit  searchHit: response.getHits()) {  
  935.             println(searchHit);  
  936.         }     
  937.     }  
  938.   
  939.   
  940.      /**  
  941.      * existsQuery  
  942.      * 匹配含有id字段的記錄  
  943.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  944.      * @throws Exception  
  945.      */  
  946.     @Test  
  947.     public void existsQuery() throws Exception{  
  948.         QueryBuilder queryBuilder = QueryBuilders.existsQuery("id");   
  949.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  950.         for (SearchHit  searchHit: response.getHits()) {  
  951.             println(searchHit);  
  952.         }     
  953.     }  
  954.       
  955.       
  956.      /**  
  957.      * prefixQuery  匹配包含具備指定前綴的術語的文檔的查詢  
  958.      * 匹配title中前綴爲JAVA的記錄  
  959.      * 匹配分詞前綴 若是字段沒分詞,就匹配整個字段前綴  
  960.      * 前綴匹配(好比我要查詢的是192.168.1.12,可是當輸入192.16八、192.168.一、192.168.1.1等的狀況都會有相應結果返回,只不過是個範圍)  
  961.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  962.      * @throws Exception  
  963.      */  
  964.     @Test  
  965.     public void prefixQuery() throws Exception{  
  966.         QueryBuilder queryBuilder = QueryBuilders.prefixQuery(  
  967.                 "title",      
  968.                 "192.138"       
  969.             );  
  970.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  971.         for (SearchHit  searchHit: response.getHits()) {  
  972.             println(searchHit);  
  973.         }  
  974.     }  
  975.       
  976.       
  977.     /**  
  978.      * MatchPhrasePrefixQueryBuilder  爲提供的字段名稱和文本建立一個類型爲「PHRASE_PREFIX」的匹配查詢。  
  979.      * @throws Exception  
  980.      */  
  981.     @Test  
  982.     public void MatchPhrasePrefixQueryBuilder() throws Exception {  
  983.         String key = "C++";  
  984.         MatchPhrasePrefixQueryBuilder matchPhrasePrefixQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("title",key);  
  985.   
  986.         matchPhrasePrefixQueryBuilder.boost(10);  
  987.         matchPhrasePrefixQueryBuilder.analyzer("standard");  
  988.         matchPhrasePrefixQueryBuilder.slop(2);  
  989.         matchPhrasePrefixQueryBuilder.maxExpansions(100);  
  990.   
  991.         SearchResponse searchResponse = client.prepareSearch()  
  992.                 .setIndices(article)  
  993.                 .setTypes(content)  
  994.                 .setQuery(matchPhrasePrefixQueryBuilder)  
  995.                 .execute()  
  996.                 .actionGet();  
  997.         for (SearchHit  searchHit: searchResponse.getHits()) {  
  998.             println(searchHit);  
  999.         }  
  1000.     }  
  1001.       
  1002.   
  1003.     /**  
  1004.      * wildcardQuery  
  1005.      * 通配符  
  1006.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  1007.      * @throws Exception  
  1008.      */  
  1009.     @Test  
  1010.     public void wildcardQuery() throws Exception{  
  1011.         QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("author", "*e");//J?V*  
  1012.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  1013.         for (SearchHit  searchHit: response.getHits()) {  
  1014.             println(searchHit);  
  1015.         }  
  1016.     }  
  1017.   
  1018.     /**  
  1019.      * fuzzyQuery  使用模糊查詢匹配文檔的查詢  
  1020.      * @throws Exception  
  1021.      */  
  1022.     @Test  
  1023.     public  void fuzzyQuery() throws Exception{  
  1024.         QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery(  
  1025.                 "author",       
  1026.                 "e"      
  1027.             );  
  1028.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  1029.         for (SearchHit  searchHit: response.getHits()) {  
  1030.             println(searchHit);  
  1031.         }  
  1032.     }  
  1033.   
  1034.   
  1035.     /**  
  1036.      * boolQuery 匹配與其餘查詢的布爾組合匹配的文檔的查詢。  
  1037.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>  
  1038.      * @throws Exception  
  1039.      */  
  1040.     @Test  
  1041.     public void BoostQuery() throws Exception{  
  1042.         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()  
  1043.                 .should(QueryBuilders.termQuery("author","eeee")).boost(100) //設置此查詢的權重。 匹配此查詢的文件(除正常權重以外)的得分乘以提供的提高。  
  1044.                 .should(QueryBuilders.termQuery("id","AV5NF_Dbhqf-jFOFkksT").boost(1));  
  1045.   
  1046.         SearchResponse response=client.prepareSearch("article").setQuery(boolQueryBuilder).execute().get();  
  1047.         for (SearchHit  searchHit: response.getHits()) {  
  1048.             println(searchHit);  
  1049.         }  
  1050.           
  1051.     }  
  1052.       
  1053.       
  1054.     /**  
  1055.      * boolQuery  
  1056.      * @throws Exception  
  1057.      */  
  1058.     @Test  
  1059.     public void boolQuery() throws Exception {  
  1060.         QueryBuilder qb = QueryBuilders.boolQuery()  
  1061.                 .must(QueryBuilders.termQuery("author", "eeee"))  
  1062.                 .must(QueryBuilders.termQuery("title", "JAVA思想"))  
  1063.                 .mustNot(QueryBuilders.termQuery("content", "C++")) //添加不得出如今匹配文檔中的查詢。  
  1064.                 .should(QueryBuilders.termQuery("id", "AV5NF_Dbhqf-jFOFkksT"))//添加應該與返回的文檔匹配的子句。 對於具備no的布爾查詢,子句必須一個或多個SHOULD子句且必須與文檔匹配,用於布爾值查詢匹配。 不容許null值。  
  1065.                 .filter(QueryBuilders.termQuery("price", "30.3"));//添加一個查詢,必須出如今匹配的文檔中,但會不貢獻得分。 不容許null值。  
  1066.         SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();  
  1067.           
  1068.         for (SearchHit  searchHit: response.getHits()) {  
  1069.             println(searchHit);  
  1070.         }  
  1071.     }  
  1072.       
  1073.   
  1074.     /**  
  1075.      * boostingQuery  
  1076.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>  
  1077.      * @throws Exception  
  1078.      */  
  1079.     @Test  
  1080.     public void boostingQuery() throws Exception {  
  1081.         QueryBuilder qb = QueryBuilders.boostingQuery(  
  1082.                 QueryBuilders.termQuery("id","AV5NF_Dbhqf-jFOFkksR"),  
  1083.                 QueryBuilders.termQuery("title","C"))  
  1084.                 .negativeBoost(0.2f);//設置負加強因子。  
  1085.         SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();  
  1086.           
  1087.         for (SearchHit  searchHit: response.getHits()) {  
  1088.             println(searchHit);  
  1089.         }  
  1090.     }  
  1091.       
  1092.       
  1093.       
  1094.     /**  
  1095.      * constantScoreQuery  
  1096.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>  
  1097.      * @throws Exception  
  1098.      */  
  1099.     @Test  
  1100.     public void constantScoreQuery() throws Exception {  
  1101.         QueryBuilder qb = QueryBuilders.constantScoreQuery(  
  1102.                 QueryBuilders.termQuery("title","C")  
  1103.         ).boost(2.0f);  
  1104.         SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();  
  1105.         for (SearchHit  searchHit: response.getHits()) {  
  1106.             println(searchHit);  
  1107.         }  
  1108.     }  
  1109.       
  1110.     /**  
  1111.      * disMaxQuery  
  1112.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>  
  1113.      * @throws Exception  
  1114.      */  
  1115.     @Test  
  1116.     public void disMaxQuery() throws Exception {  
  1117.         QueryBuilder qb = QueryBuilders.disMaxQuery()  
  1118.                 .add(QueryBuilders.termQuery("id", "512"))  
  1119.                 .add(QueryBuilders.termQuery("author", "ckse"))  
  1120.                 .boost(1.2f)  
  1121.                 .tieBreaker(0.7f);  
  1122.         SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();  
  1123.         for (SearchHit  searchHit: response.getHits()) {  
  1124.             println(searchHit);  
  1125.         }  
  1126.     }  
  1127.       
  1128.       
  1129.     /**  
  1130.      * functionScoreQuery  
  1131.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>  
  1132.      * @throws Exception  
  1133.      */  
  1134.     @Test  
  1135.     public void functionScoreQuery() throws Exception {  
  1136.         FunctionScoreQueryBuilder.FilterFunctionBuilder[] functions = {  
  1137.                 new FunctionScoreQueryBuilder.FilterFunctionBuilder(  
  1138.                         QueryBuilders.matchQuery("id", "512"),  
  1139.                         ScoreFunctionBuilders.randomFunction("ABCDEF")),  
  1140.                 new FunctionScoreQueryBuilder.FilterFunctionBuilder(  
  1141.                         ScoreFunctionBuilders.exponentialDecayFunction("age", 0L, 1L))  
  1142.         };  
  1143.         QueryBuilder qb = QueryBuilders.functionScoreQuery(functions);  
  1144.         SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();  
  1145.         for (SearchHit  searchHit: response.getHits()) {  
  1146.             println(searchHit);  
  1147.         }  
  1148.     }  
  1149.       
  1150.       
  1151.     /**  
  1152.      * regexpQuery 匹配包含具備指定正則表達式的術語的文檔的查詢。  
  1153.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  1154.      * @throws Exception  
  1155.      */  
  1156.     @Test  
  1157.     public void regexpQuery() throws Exception {  
  1158.         QueryBuilder qb = QueryBuilders.regexpQuery(  
  1159.                 "title",  
  1160.                 "*J");  
  1161.         SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();  
  1162.         for (SearchHit  searchHit: response.getHits()) {  
  1163.             println(searchHit);  
  1164.         }  
  1165.     }  
  1166.       
  1167.     /**  
  1168.      * typeQuery  
  1169.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  1170.      * @throws Exception  
  1171.      */  
  1172.     @Test  
  1173.     public  void typeQuery() throws Exception{  
  1174.         QueryBuilder queryBuilder = QueryBuilders.typeQuery("data");  
  1175.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  1176.         for (SearchHit  searchHit: response.getHits()) {  
  1177.             println(searchHit);  
  1178.         }  
  1179.     }  
  1180.   
  1181.     /**  
  1182.      * idsQuery  
  1183.      * 類型是可選的  
  1184.      * 指定type和id進行查詢。  
  1185.      * <href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>  
  1186.      * @throws Exception  
  1187.      */  
  1188.     @Test  
  1189.     public  void idsQuery() throws Exception{  
  1190.         QueryBuilder queryBuilder = QueryBuilders.idsQuery(content)   
  1191.                 .addIds("512", "520", "531");  
  1192.         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();  
  1193.         for (SearchHit  searchHit: response.getHits()) {  
  1194.             println(searchHit);  
  1195.         }  
  1196.     }  
  1197.       
  1198.     /**  
  1199.      * group 分組查詢  
  1200.      */  
  1201.     @Test  
  1202.     public void group(){  
  1203.   
  1204.       
  1205.     }  
  1206.       
  1207.     /**  
  1208.      * Aggregation  
  1209.      */  
  1210.     @Test  
  1211.     public void Aggregation()  
  1212.     {  
  1213.   
  1214.         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();    
  1215.         //添加時間範圍過濾    
  1216.         boolQueryBuilder.must(QueryBuilders.rangeQuery("@timestamp").format("yyyy-MM-dd HH:mm:ss").gte("").lte(""));    
  1217.         AggregationBuilder aggregationBuilder = AggregationBuilders  
  1218.                 //terms(查詢字段別名).field(分組字段)   
  1219.                 .terms("").field("")    
  1220.                 .order(Terms.Order.aggregation("", false))    
  1221.                 .size(10)    
  1222.                 .subAggregation(AggregationBuilders.count("").field(""));    
  1223.         SearchRequestBuilder searchRequestBuilder = client.prepareSearch("article").setTypes("articledate")    
  1224.                 .setQuery(boolQueryBuilder)    
  1225.                 .addAggregation(aggregationBuilder)    
  1226.                 .setSize(0);    
  1227.     
  1228.         SearchResponse sr = searchRequestBuilder.execute().actionGet();    
  1229.         Terms genders = sr.getAggregations().get("");//統計字段別名  
  1230.         for (Terms.Bucket entry : genders.getBuckets())   
  1231.         {   
  1232.           System.out.println((String) entry.getKey()+"-("+entry.getDocCount()+")");   
  1233.         }  
  1234.           
  1235.           
  1236.         //如想group by 時間,而且按天來進行分組  
  1237.         AggregationBuilder aggregation = AggregationBuilders    
  1238.                 .dateHistogram("agg")    
  1239.                 .field("@timestamp")    
  1240.                 .format("yyyy-MM-dd")    
  1241.                 .dateHistogramInterval(DateHistogramInterval.DAY);   
  1242.         //可能有新需求,group by 時間,姓名  
  1243.         //AggregationBuilder nameAgg = AggregationBuilders.terms(姓名別名).field(姓名).size(10);    
  1244.         //aggregation.subAggregation(nameAgg);   
  1245.           
  1246.         //能夠能須要進行名稱統計,可是須要distinct  
  1247.         //aggregation.subAggregation(AggregationBuilders.cardinality(別名).field(姓名))   
  1248.           
  1249.         //其餘以下  
  1250. //        (1)統計某個字段的數量    
  1251. //        ValueCountBuilder vcb=  AggregationBuilders.count("count_uid").field("uid");    
  1252. //      (2)去重統計某個字段的數量(有少許偏差)    
  1253. //       CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");    
  1254. //      (3)聚合過濾    
  1255. //      FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));    
  1256. //      (4)按某個字段分組    
  1257. //      TermsBuilder tb=  AggregationBuilders.terms("group_name").field("name");    
  1258. //      (5)求和    
  1259. //      SumBuilder  sumBuilder= AggregationBuilders.sum("sum_price").field("price");    
  1260. //      (6)求平均    
  1261. //      AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");    
  1262. //      (7)求最大值    
  1263. //      MaxBuilder mb= AggregationBuilders.max("max_price").field("price");     
  1264. //      (8)求最小值    
  1265. //      MinBuilder min= AggregationBuilders.min("min_price").field("price");    
  1266. //      (9)按日期間隔分組    
  1267. //      DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");    
  1268. //      (10)獲取聚合裏面的結果    
  1269. //      TopHitsBuilder thb=  AggregationBuilders.topHits("top_result");    
  1270. //      (11)嵌套的聚合    
  1271. //      NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");    
  1272. //      (12)反轉嵌套    
  1273. //      AggregationBuilders.reverseNested("res_negsted").path("kps ");    
  1274.           
  1275.           
  1276.     }  
  1277.       
  1278.       
  1279.     /**  
  1280.      * MultiSearchResponse 多字段檢索  
  1281.      */  
  1282.     @Test  
  1283.     public void MultiSearchResponse(){  
  1284.           
  1285.           
  1286.         SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery("JAVA"));  
  1287.         SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("title", "C"));  
  1288.   
  1289.         MultiSearchResponse sr = client.prepareMultiSearch().add(srb1).add(srb2).get();  
  1290.   
  1291.         for (MultiSearchResponse.Item item : sr.getResponses()) {  
  1292.             SearchResponse response = item.getResponse();  
  1293.             for (SearchHit searchHit : response.getHits()) {  
  1294.                 println(searchHit);  
  1295.             }  
  1296.         }  
  1297.     }  
  1298.       
  1299.       
  1300.       
  1301.       
  1302.     /**  
  1303.      * 複雜查詢  
  1304.      */  
  1305.     @Test  
  1306.     public void complexSearch1(){  
  1307.         int page=1;  
  1308.         int pageSize=10;  
  1309.         String keyword="";  
  1310.           
  1311.         BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();  
  1312.           
  1313.         if(keyword!=null&&!keyword.equals("")){  
  1314.            QueryBuilder nameBuilder=QueryBuilders.matchQuery("zuName", keyword).analyzer("ik_max_word").boost(10);  
  1315.            QueryBuilder labelBuilder=QueryBuilders.matchQuery("zuLabelName", keyword).analyzer("ik_max_word").boost(10);  
  1316.            QueryBuilder categoryBuilder=QueryBuilders.matchQuery("categoryName", keyword).analyzer("ik_max_word").boost(10);  
  1317.            boolQueryBuilder.should(nameBuilder).should(labelBuilder).should(categoryBuilder);  
  1318.         }else{  
  1319.            boolQueryBuilder.must(QueryBuilders.matchAllQuery());  
  1320.         }  
  1321.         SearchResponse response=client.prepareSearch("article").setTypes("articledate")  
  1322.               .setQuery(boolQueryBuilder)  
  1323.               .setFrom((page-1)*pageSize).setSize(pageSize)  
  1324.               .setExplain(true)  
  1325.               .get();  
  1326.   
  1327.         SearchHits hits=response.getHits();  
  1328.     }  
  1329.       
  1330.     /**  
  1331.      * 複雜查詢2  
  1332.      */  
  1333.     @Test  
  1334.     public void complexSearch2(){  
  1335.           
  1336.         String relatedValue="fendo";  
  1337.         String userId="1234";  
  1338.         int page=1;  
  1339.         int pageSize=10;  
  1340.           
  1341.         BoolQueryBuilder builders=new BoolQueryBuilder();  
  1342.         //加上條件  
  1343.         builders.must(QueryBuilders.termQuery("userId", userId));  
  1344.         if(relatedValue=="fendo"){  
  1345.            builders.must(QueryBuilders.nestedQuery("related4ZuValue",  
  1346.                  QueryBuilders.boolQuery()  
  1347.                           .must(QueryBuilders.termQuery("related4ZuValue.nameValue", ""))  
  1348.                           //.must(QueryBuilders.rangeQuery("endTime").lte(LongformStringDate(System.currentTimeMillis())))  
  1349.                  ,ScoreMode.None));  
  1350.         }else{  
  1351.            builders.must(QueryBuilders.nestedQuery("related4ZuValue", QueryBuilders.termQuery("related4ZuValue.nameValue", ""),   
  1352.                  ScoreMode.None));  
  1353.         }  
  1354.         SearchResponse response=client.prepareSearch("article").setTypes("articledate")  
  1355.               .setQuery(builders).setFrom((page-1)*pageSize)  
  1356.               .setSize(pageSize)  
  1357.               .get();  
  1358.         SearchHits hits=response.getHits();  
  1359.     }  
  1360.       
  1361.       
  1362.     /**  
  1363.      * 取查詢結果總和count  
  1364.      */  
  1365.     @Test  
  1366.     public void countSum() {  
  1367.           
  1368.            int relatedValue=1;  
  1369.            String userId="111";  
  1370.            BoolQueryBuilder builders=new BoolQueryBuilder();  
  1371.            builders.must(QueryBuilders.termQuery("userId", userId));  
  1372.            if(relatedValue==1){  
  1373.                builders.must(QueryBuilders.nestedQuery("related4ZuValue",QueryBuilders.boolQuery()  
  1374.                          .must(QueryBuilders.termQuery("related4ZuValue.nameValue", "123"))  
  1375.                          .must(QueryBuilders.rangeQuery("endTime").lte(""))  
  1376.                 ,ScoreMode.None));  
  1377.                                
  1378.            }else{  
  1379.               builders.must(QueryBuilders.nestedQuery("related4ZuValue", QueryBuilders.termQuery("related4ZuValue.nameValue", "111"),   
  1380.                     ScoreMode.None));  
  1381.            }  
  1382.            SearchResponse response=client.prepareSearch("article").setTypes("articledate")  
  1383.                  .setQuery(builders)  
  1384.                  .setSize(1)  
  1385.                  .get();  
  1386.            SearchHits hits=response.getHits();  
  1387.            System.out.println(hits.getTotalHits());  
  1388.         }  
  1389.       
  1390.       
  1391.       
  1392.     /**  
  1393.      * 聚合求和sum  
  1394.      * @param keyword  
  1395.      * @param startTime  
  1396.      * @param endTime  
  1397.      */  
  1398.     @Test  
  1399.     public void getPlatformZuOrdersTotalAmount() {  
  1400.           
  1401.            String keyword="";  
  1402.            String startTime="";  
  1403.            String endTime="";  
  1404.           
  1405.            BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();  
  1406.            if(keyword==null||keyword.equals("")){  
  1407.               QueryBuilder queryBuilder=QueryBuilders.matchAllQuery();  
  1408.               boolQueryBuilder.must(queryBuilder);  
  1409.            }else{  
  1410.               QueryBuilder zuNameBuilder=QueryBuilders.matchQuery("zuName", keyword);  
  1411.               QueryBuilder buyerNameBuilder=QueryBuilders.matchQuery("buyerName", keyword);  
  1412.               QueryBuilder sellerNameBuilder=QueryBuilders.matchQuery("sellerName", keyword);  
  1413.               boolQueryBuilder.should(zuNameBuilder).should(buyerNameBuilder).should(sellerNameBuilder);  
  1414.                 
  1415.            }  
  1416.            if(!startTime.equals("")){  
  1417.               QueryBuilder addTimeBuilder=QueryBuilders.rangeQuery("addTime").from(startTime).to(endTime);  
  1418.               boolQueryBuilder.must(addTimeBuilder);  
  1419.            }  
  1420.            SearchResponse response=client.prepareSearch("article").setTypes("articledate")  
  1421.                  .setQuery(boolQueryBuilder)  
  1422.                  .addAggregation(AggregationBuilders.sum("price").field("price"))  
  1423.                  .get();  
  1424.            Sum sum=response.getAggregations().get("price");  
  1425.            System.out.println(sum.getValue());  
  1426.         }  
  1427.       
  1428.       
  1429.     /**  
  1430.      * ---------------------------分頁  
  1431.      */  
  1432.       
  1433.       
  1434.     /**  
  1435.      * 使用Scroll方法分頁  
  1436.      */  
  1437.     @Test  
  1438.     public void queryPageScroll(){  
  1439.           
  1440.         QueryBuilder qb = QueryBuilders.termQuery("id", "1");  
  1441.   
  1442.         SearchResponse scrollResp = client.prepareSearch("article")  
  1443.                 .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)  
  1444.                 .setScroll(new TimeValue(60000))  
  1445.                 .setQuery(qb)  
  1446.                 .setSize(1).get();   
  1447.         do {  
  1448.             for (SearchHit hit : scrollResp.getHits().getHits()) {  
  1449.                 println(hit);  
  1450.             }  
  1451.             scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();  
  1452.         } while(scrollResp.getHits().getHits().length != 0);   
  1453.     }  
  1454.       
  1455.       
  1456.     /**  
  1457.      * 分頁  
  1458.      * @throws Exception  
  1459.      */  
  1460.     @Test  
  1461.     public void fenye() throws Exception {  
  1462.   
  1463.         SearchResponse response = client.prepareSearch("article")  
  1464.                 .setQuery(QueryBuilders.matchAllQuery())  
  1465.                 .setFrom(10)   
  1466.                 .setSize(20)  
  1467.                 .execute().actionGet();  
  1468.         for (SearchHit searchHit : response.getHits()) {  
  1469.             println(searchHit);  
  1470.         }  
  1471.   
  1472.     }  
  1473.       
  1474.       
  1475.     /**  
  1476.      * 高亮  
  1477.      * @throws Exception  
  1478.      */  
  1479.     @Test  
  1480.     public void highlighter() throws Exception{  
  1481.   
  1482.   
  1483.          QueryBuilder matchQuery = QueryBuilders.matchQuery("author", "fendo");  
  1484.             HighlightBuilder hiBuilder=new HighlightBuilder();  
  1485.             hiBuilder.preTags("<h2>");  
  1486.             hiBuilder.postTags("</h2>");  
  1487.             hiBuilder.field("author");  
  1488.             // 搜索數據  
  1489.             SearchResponse response = client.prepareSearch("article")  
  1490.                     .setQuery(matchQuery)  
  1491.                     .highlighter(hiBuilder)  
  1492.                     .execute().actionGet();  
  1493.             for (SearchHit searchHit : response.getHits()) {  
  1494.                 println(searchHit);  
  1495.             }  
  1496.     }  
  1497.       
  1498.       
  1499.       
  1500.       
  1501.       
  1502.     /**  
  1503.      * ---------------------------分詞器  
  1504.      */  
  1505.       
  1506.     /**  
  1507.      * AnalyzeRequest 分詞器  
  1508.      * <href='https://www.elastic.co/guide/cn/elasticsearch/guide/current/standard-tokenizer.html'>  
  1509.      * @throws Exception  
  1510.      */  
  1511.     @Test  
  1512.     public void AnalyzeRequest() throws Exception {  
  1513.         AnalyzeRequest analyzeRequest = new AnalyzeRequest();  
  1514.         analyzeRequest.text("My œsophagus caused a débâcle");  
  1515.         /**  
  1516.          * whitespace (空白字符)分詞器按空白字符 —— 空格、tabs、換行符等等進行簡單拆分  
  1517.          * letter 分詞器 ,採用另一種策略,按照任何非字符進行拆分  
  1518.          * standard 分詞器使用 Unicode 文本分割算法  
  1519.          */  
  1520.         analyzeRequest.addTokenFilter("standard");  
  1521.         analyzeRequest.addCharFilter("asciifolding");  
  1522.         ActionFuture<AnalyzeResponseanalyzeResponseActionFuture =  client.admin().indices().analyze(analyzeRequest);  
  1523.         List<AnalyzeResponse.AnalyzeTokenanalyzeTokens =  analyzeResponseActionFuture.actionGet().getTokens();  
  1524.         for (AnalyzeResponse.AnalyzeToken analyzeToken : analyzeTokens){  
  1525.             System.out.println(analyzeToken.getTerm());  
  1526.         }  
  1527.     }  
  1528.       
  1529.     /**  
  1530.      * IK分詞器  
  1531.      * @param args  
  1532.      * @throws IOException  
  1533.      */  
  1534.     public  void IKAnalyzer(String []args) throws IOException {  
  1535.         Settings settings  = Settings.EMPTY;  
  1536.         IKAnalyzer analyzer = new IKAnalyzer();  
  1537.         String text = "中華人民共和國國歌";  
  1538.         StringReader stringReader = new StringReader(text);  
  1539.         TokenStream tokenStream = analyzer.tokenStream("",stringReader);  
  1540.         tokenStream.reset();  
  1541.         CharTermAttribute term=tokenStream.getAttribute(CharTermAttribute.class);  
  1542.         while(tokenStream.incrementToken()){  
  1543.             System.out.print(term.toString()+"—");  
  1544.         }  
  1545.         stringReader.close();  
  1546.         tokenStream.close();  
  1547.     }  
  1548.      
  1549.     /**  
  1550.      * 輸出結果SearchResponse  
  1551.      * @param response  
  1552.      */  
  1553.     public static void println(SearchResponse response){  
  1554.         System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-");  
  1555.         System.err.println(  
  1556.                 "getFailedShards : " + response.getFailedShards() + "\n" +  
  1557.                 "getNumReducePhases : " + response.getNumReducePhases() + "\n" +  
  1558.                 "getScrollId : " + response.getScrollId() +  "\n" +  
  1559.                 "getTookInMillis : " + response.getTookInMillis() + "\n" +   
  1560.                 "getTotalShards : " + response.getTotalShards() +  "\n" +  
  1561.                 "getAggregations : " + response.getAggregations() + "\n" +   
  1562.                 "getProfileResults : " + response.getProfileResults() + "\n" +   
  1563.                 "getShardFailures : " + response.getShardFailures() + "\n" +   
  1564.                 "getSuggest : " + response.getSuggest() + "\n" +   
  1565.                 "getTook : " + response.getTook() + "\n" +   
  1566.                 "isTerminatedEarly : " + response.isTerminatedEarly() + "\n" +   
  1567.                 "isTimedOut : " + response.isTimedOut() + "\n" +   
  1568.                 "remoteAddress : " + response.remoteAddress() + "\n" +   
  1569.                 "status : " + response.status() + "\n" +   
  1570.                 "getHits : " + response.getHits()   
  1571.                 );  
  1572.     }  
  1573.   
  1574.     /**  
  1575.      * 輸出結果SearchResponse  
  1576.      * @param response  
  1577.      */  
  1578.     public static void println(SearchHit searchHit){  
  1579.         System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-");  
  1580.         System.err.println(   
  1581.                 "docId : " + searchHit.docId() + "\n" +  
  1582.                 "getId : " + searchHit.getId() + "\n" +  
  1583.                 "getIndex : " + searchHit.getIndex()+ "\n" +  
  1584.                 "getScore : " + searchHit.getScore() + "\n" +  
  1585.                 "getSourceAsString : " + searchHit.getSourceAsString() + "\n" +  
  1586.                 "getType : " + searchHit.getType() + "\n" +  
  1587.                 "getVersion : " + searchHit.getVersion() + "\n" +  
  1588.                 "fieldsOrNull : " + searchHit.fieldsOrNull() + "\n" +  
  1589.                 "getExplanation : " + searchHit.getExplanation() + "\n" +  
  1590.                 "getFields : " + searchHit.getFields() + "\n" +  
  1591.                 "highlightFields : " + searchHit.highlightFields() + "\n" +  
  1592.                 "hasSource : " + searchHit.hasSource()  
  1593.                 );  
  1594.     }  
  1595.   
  1596.       
  1597. }  

 

完整項目以下:http://download.csdn.net/download/u011781521/9964499

相關文章
相關標籤/搜索