Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解

来源:互联网 发布:淘宝旺旺官网 编辑:程序博客网 时间:2024/05/17 07:33

Elasticsearch JAVA操作有三种客户端:


1、TransportClient

2、JestClient

3、RestClient


还有种是2.3中有的NodeClient,在5.5.1中好像没有了。还有种是spring-data-elasticsearch,这里先以TransportClient来讲解CRUD,所用环境为:


JDK1.8

ES5.5.1

TransportClient5.5.1



POM.XML文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.fendo</groupId>  <artifactId>TransportClient</artifactId>  <packaging>war</packaging>  <version>0.0.1-SNAPSHOT</version>  <name>TransportClient Maven Webapp</name>  <url>http://maven.apache.org</url>     <!-- 初始化框架的版本号 --><properties><spring.version>4.2.7.RELEASE</spring.version></properties>    <dependencies><dependency>    <groupId>junit</groupId>    <artifactId>junit</artifactId>    <version>4.12</version></dependency>    <!-- 加入ServletAPI --><dependency>    <groupId>javax.servlet</groupId>    <artifactId>javax.servlet-api</artifactId>    <version>3.1.0</version>    <scope>provided</scope></dependency><dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-validator</artifactId>            <version>4.2.0.Final</version>     </dependency><!-- MySQL依赖 start --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version></dependency><!-- MySQL依赖 end --><!-- 加入MyBatis 依赖 start --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.5</version></dependency><!-- 加入MyBatis 依赖 end --><!-- Log4j start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-1.2-api</artifactId>    <version>2.7</version></dependency><dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-slf4j-impl</artifactId>    <version>2.7</version></dependency><dependency>    <groupId>org.apache.logging.log4j</groupId>    <artifactId>log4j-core</artifactId>    <version>2.7</version></dependency><!-- Log4j end --><!-- 引用c3p0 依赖 start--><dependency>    <groupId>com.mchange</groupId>    <artifactId>c3p0</artifactId>    <version>0.9.2.1</version></dependency><!-- 引用c3p0 依赖 end--><!-- 引用插件依赖:MyBatis整合Spring --><dependency>    <groupId>org.mybatis</groupId>    <artifactId>mybatis-spring</artifactId>    <version>1.3.0</version></dependency>                <!-- JSTL --><dependency>      <groupId>javax.servlet</groupId>      <artifactId>jstl</artifactId>      <version>1.2</version>  </dependency>    <!--  --><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-core</artifactId>    <version>2.9.0</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-databind</artifactId>    <version>2.9.0</version></dependency><dependency>    <groupId>com.fasterxml.jackson.core</groupId>    <artifactId>jackson-annotations</artifactId>    <version>2.9.0</version></dependency><dependency>    <groupId>com.alibaba</groupId>    <artifactId>fastjson</artifactId>    <version>1.2.12</version></dependency><!-- Elasticserach5 --><dependency>            <groupId>org.elasticsearch</groupId>            <artifactId>elasticsearch</artifactId>            <version>5.5.1</version>        </dependency>   <!-- <dependency>    <groupId>org.elasticsearch.module</groupId>    <artifactId>reindex</artifactId>    <version>2.4.3</version></dependency> --><dependency>              <groupId>com.google.collections</groupId>      <artifactId>google-collections</artifactId>       <version>1.0</version></dependency><!-- transport客户端 --><dependency>            <groupId>org.elasticsearch.client</groupId>            <artifactId>transport</artifactId>            <version>5.5.1</version>        </dependency><!-- IK分词器 --><dependency>            <groupId>org.elasticsearch</groupId>            <artifactId>elasticsearch-analysis-ik</artifactId>            <version>5.5.1</version>        </dependency>          </dependencies>    <repositories>        <repository>            <id>spring-libs-snapshot</id>            <name>Spring Snapshot Repository</name>            <url>http://repo.spring.io/libs-snapshot</url>        </repository>        <repository>            <id>elasticsearch-releases</id>            <url>https://artifacts.elastic.co/maven</url>            <releases>                <enabled>true</enabled>            </releases>            <snapshots>                <enabled>false</enabled>            </snapshots>        </repository>    </repositories>    <build>    <finalName>TransportClient</finalName>         <plugins>            <plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-compiler-plugin</artifactId>                <configuration>                    <source>1.8</source>                    <target>1.8</target>                </configuration>            </plugin>        </plugins>  </build></project>


详细代码如下:

package com.fendo.temp;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.StringReader;import java.net.InetAddress;import java.net.UnknownHostException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.ExecutionException;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.action.get.MultiGetItemResponse;import org.elasticsearch.action.get.MultiGetResponse;import org.elasticsearch.index.query.MatchQueryBuilder;import org.elasticsearch.action.ActionFuture;import org.elasticsearch.action.admin.indices.analyze.AnalyzeRequest;import org.elasticsearch.action.admin.indices.analyze.AnalyzeResponse;import org.elasticsearch.script.Script;import org.elasticsearch.script.ScriptType;import org.elasticsearch.index.query.MultiMatchQueryBuilder;import org.elasticsearch.index.query.MatchPhrasePrefixQueryBuilder;import org.elasticsearch.index.query.MatchPhraseQueryBuilder;import org.elasticsearch.action.search.MultiSearchResponse;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;import org.apache.lucene.search.join.ScoreMode;import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;import org.elasticsearch.action.bulk.BulkRequestBuilder;import org.elasticsearch.action.bulk.BulkResponse;import org.elasticsearch.action.delete.DeleteResponse;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexRequestBuilder;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchRequestBuilder;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.search.SearchType;import org.elasticsearch.action.update.UpdateRequest;import org.elasticsearch.action.update.UpdateResponse;import org.elasticsearch.client.Response;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.common.unit.Fuzziness;import org.elasticsearch.common.unit.TimeValue;import org.elasticsearch.common.xcontent.XContentBuilder;import org.elasticsearch.common.xcontent.XContentFactory;import org.elasticsearch.index.query.BoolQueryBuilder;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.search.aggregations.AggregationBuilder;import org.elasticsearch.search.aggregations.AggregationBuilders;import org.elasticsearch.search.aggregations.Aggregations;import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;import org.elasticsearch.search.aggregations.bucket.terms.Terms;import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;import org.elasticsearch.search.aggregations.metrics.sum.Sum;import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;import org.elasticsearch.search.sort.FieldSortBuilder;import org.elasticsearch.search.sort.SortOrder;import org.elasticsearch.transport.client.PreBuiltTransportClient;import org.elasticsearch.action.bulk.BackoffPolicy;import org.elasticsearch.action.bulk.BulkItemResponse;import org.elasticsearch.action.bulk.BulkProcessor;import org.elasticsearch.action.bulk.BulkRequest;import org.elasticsearch.action.bulk.BulkResponse;import org.elasticsearch.common.unit.ByteSizeUnit;import org.elasticsearch.common.unit.ByteSizeValue;import org.elasticsearch.common.unit.TimeValue;import org.wltea.analyzer.lucene.IKAnalyzer;import org.joda.time.DateTime;import org.junit.Before;import org.junit.Test;import com.alibaba.fastjson.JSONObject;public class TransportClientTest {private TransportClient client;private final static String article="article";private final static String content="content";@Beforepublic void getClient() throws Exception{        //设置集群名称        Settings settings = Settings.builder().put("cluster.name", "my-application").build();// 集群名        //创建client        client  = new PreBuiltTransportClient(settings)                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));}/** * -----------------------------------------增(创建索引,增加映射,新增文档) *//** * 创建索引的四种方法 */@Testpublic void JSON(){String json = "{" +        "\"id\":\"kimchy\"," +        "\"postDate\":\"2013-01-30\"," +        "\"message\":\"trying out Elasticsearch\"" +    "}";}/** * 创建索引并添加映射 * @throws IOException  */@Testpublic void CreateIndexAndMapping() throws Exception{                CreateIndexRequestBuilder  cib=client.admin().indices().prepareCreate(article);        XContentBuilder mapping = XContentFactory.jsonBuilder()                .startObject()                    .startObject("properties") //设置之定义字段                      .startObject("author")                        .field("type","string") //设置数据类型                      .endObject()                      .startObject("title")                         .field("type","string")                      .endObject()                      .startObject("content")                         .field("type","string")                      .endObject()                      .startObject("price")                         .field("type","string")                      .endObject()                      .startObject("view")                         .field("type","string")                      .endObject()                      .startObject("tag")                         .field("type","string")                      .endObject()                      .startObject("date")                         .field("type","date")  //设置Date类型                         .field("format","yyyy-MM-dd HH:mm:ss") //设置Date的格式                      .endObject()                  .endObject()                .endObject();        cib.addMapping(content, mapping);                CreateIndexResponse res=cib.execute().actionGet();                System.out.println("----------添加映射成功----------");}/** *  创建索引并添加文档 * @throws Exception */@Testpublic void addIndexAndDocument() throws Exception{Date time = new Date();IndexResponse response = client.prepareIndex(article, content).setSource(XContentFactory.jsonBuilder().startObject()    .field("id","447").field("author","fendo").field("title","192.138.1.2").field("content","这是JAVA有关的书籍").field("price","20").field("view","100").field("tag","a,b,c,d,e,f").field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time)).endObject()).get();System.out.println("添加索引成功,版本号:"+response.getVersion());}/** * -------------------------------------Bulk--------------------------------- *//** * bulkRequest * @throws Exception */    @Test    public void bulkRequest() throws Exception {        BulkRequestBuilder bulkRequest = client.prepareBulk();        Date time = new Date();                // either use client#prepare, or use Requests# to directly build index/delete requests        bulkRequest.add(client.prepareIndex(article, content, "199")                .setSource(XContentFactory.jsonBuilder()                        .startObject()                        .field("id","199")                .field("author","fendo")                .field("title","BULK")                .field("content","这是BULK有关的书籍")                .field("price","40")                .field("view","300")                .field("tag","a,b,c")                .field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time))                        .endObject()                )        );        bulkRequest.add(client.prepareIndex(article,content, "101")                .setSource(XContentFactory.jsonBuilder()                .startObject()                .field("id","101")                .field("author","fendo")                .field("title","ACKSE")                .field("content","这是ACKSE有关的书籍")                .field("price","50")                .field("view","200")                .field("tag","a,b,c")                .field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time))                        .endObject()                )        );        BulkResponse bulkResponse = bulkRequest.get();        if (bulkResponse.hasFailures()) {            // process failures by iterating through each bulk response item        //System.out.println(bulkResponse.getTook());        }    }            /**设置自动提交文档     * BulkProcessor     * @throws Exception     */    @Test    public void autoBulkProcessor() throws Exception {        BulkProcessor bulkProcessor = BulkProcessor.builder(client,    new BulkProcessor.Listener() {        @Override        public void beforeBulk(long executionId,                               BulkRequest request) {        //提交前调用        }        @Override        public void afterBulk(long executionId,                              BulkRequest request,                              BulkResponse response) {        //提交结束后调用(无论成功或失败)        System.out.println( "提交" + response.getItems().length + "个文档,用时"+ response.getTookInMillis() + "MS" + (response.hasFailures() ? " 有文档提交失败!" : ""));        }        @Override        public void afterBulk(long executionId,                              BulkRequest request,                              Throwable failure) {         //提交结束且失败时调用         System.out.println( " 有文档提交失败!after failure=" + failure);        }    })//当请求超过10000个(default=1000)或者总大小超过1GB(default=5MB)时,触发批量提交动作。    .setBulkActions(10000)//文档数量达到1000时提交    .setBulkSize(new ByteSizeValue(5, ByteSizeUnit.MB))//总文档体积达到5MB时提交     .setFlushInterval(TimeValue.timeValueSeconds(5))//每5S提交一次(无论文档数量、体积是否达到阈值)    .setConcurrentRequests(1)//加1后为可并行的提交请求数,即设为0代表只可1个请求并行,设为1为2个并行    .setBackoffPolicy(            BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3))    .build();            //提交单个        //String json = "{\"id\":\"66\",\"author\":\"ckse\",\"title\":\"windows编程\",\"content\":\"windows 32 API编程\",\"price\":\"99\",\"view\":\"222\",\"date\":\"2017-08-01 17:21:18\"}";        //bulkProcessor.add(new IndexRequest("设置的index name", "设置的type name","要插入的文档的ID").source(json));//添加文档,以便自动提交     for(int i=0;i<80080;i++){          //业务对象          String json = "{\"id\":\""+i+"\",\"author\":\"ckse\",\"title\":\"windows编程\",\"content\":\"windows 32 API编程\",\"price\":\"99\",\"view\":\"222\",\"date\":\"2017-08-01 17:21:18\"}";          System.out.println(json);          bulkProcessor.add(new IndexRequest("article", "content",""+i).source(json));//添加文档,以便自动提交     }          System.out.println("创建成功!!!");    }    //手动 批量更新    @Test    public void multipleBulkProcessor() throws Exception {     BulkRequestBuilder bulkRequest = client.prepareBulk();     for(int i=500;i<1000;i++){          //业务对象          String jsons = "{\"id\":\""+i+"\",\"author\":\"ckse\",\"title\":\"windows编程\",\"content\":\"windows 32 API编程\",\"price\":\"99\",\"view\":\"222\",\"date\":\"2017-08-01 17:21:18\"}";          IndexRequestBuilder indexRequest = client.prepareIndex("article", "content")                  //指定不重复的ID                  .setSource(jsons).setId(String.valueOf(i));          //添加到builder中          bulkRequest.add(indexRequest);     }     BulkResponse bulkResponse = bulkRequest.execute().actionGet();     if (bulkResponse.hasFailures()) {          // process failures by iterating through each bulk response item          System.out.println(bulkResponse.buildFailureMessage());     }     System.out.println("创建成功!!!");     }    /** * 使用Bulk批量添加导入数据 *  */@Testpublic void ImportBulk(){FileReader fr = null;BufferedReader bfr = null;String line=null;try {                File file = new File("F:\\Source\\Elasticsearch\\TransportClient\\src\\main\\resources\\bulk.txt");        fr=new FileReader(file);        bfr=new BufferedReader(fr);        BulkRequestBuilder bulkRequest=client.prepareBulk();        int count=0;        while((line=bfr.readLine())!=null){            bulkRequest.add(client.prepareIndex(article,content).setSource(line));            if (count%10==0) {                bulkRequest.execute().actionGet();            }            count++;        }        bulkRequest.execute().actionGet();        System.out.println("导入成功!!!");} catch (Exception e) {e.printStackTrace();}finally {        try {bfr.close();        fr.close();} catch (IOException e) {e.printStackTrace();}}}/** * 使用Bulk批量导出数据 * @throws ExecutionException  * @throws InterruptedException  */@Testpublic void ExportBulk() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();        SearchResponse response = client.prepareSearch("article").setQuery(queryBuilder).get();                SearchHits resultHits = response.getHits();        System.out.println(JSONObject.toJSON(resultHits));                FileWriter fw=null;        BufferedWriter bfw =null;        try {            File file = new File("F:\\Source\\Elasticsearch\\TransportClient\\src\\main\\resources\\bulk.txt");            fw = new FileWriter(article);            bfw = new BufferedWriter(fw);            if (resultHits.getHits().length == 0) {                System.out.println("查到0条数据!");            } else {                for (int i = 0; i < resultHits.getHits().length; i++) {                    String jsonStr = resultHits.getHits()[i]                            .getSourceAsString();                    System.out.println(jsonStr);                    bfw.write(jsonStr);                    bfw.write("\n");                }            }} catch (Exception e) {   e.printStackTrace();}finally {        try {bfw.close();        fw.close();} catch (IOException e) {e.printStackTrace();}}}/** * -----------------------------------------删(删除索引,删除文档) *//** * 删除整个索引库 */@Testpublic void deleteAllIndex(){String indexName="article";/** * 两种方式如下: *///1)//可以根据DeleteIndexResponse对象的isAcknowledged()方法判断删除是否成功,返回值为boolean类型.DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(indexName)                .execute().actionGet();System.out.println("是否删除成功:"+dResponse.isAcknowledged());//2)//如果传人的indexName不存在会出现异常.可以先判断索引是否存在:IndicesExistsRequest inExistsRequest = new IndicesExistsRequest(indexName);IndicesExistsResponse inExistsResponse = client.admin().indices()                .exists(inExistsRequest).actionGet();//根据IndicesExistsResponse对象的isExists()方法的boolean返回值可以判断索引库是否存在.System.out.println("是否删除成功:"+inExistsResponse.isExists());}/** * 通过ID删除 */@Testpublic void deleteById(){DeleteResponse dResponse = client.prepareDelete(article,content, "AV49wyfCWmWw7AxKFxeb").execute().actionGet();if ("OK".equals(dResponse.status())) {            System.out.println("删除成功");        } else {            System.out.println("删除失败");        }}/** * 通过Query delete删除 */@Testpublic void queryDelete() {//   String guid="AV49wyfCWmWw7AxKFxeb";//   String author="kkkkk";//   DeleteByQueryAction.INSTANCE.newRequestBuilder(client)//         .source(article)//         .filter(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("id", guid)).must(QueryBuilders.termQuery("author", author)).must(QueryBuilders.typeQuery(content)))//         .get();}/** * 使用matchAllQuery删除所有文档 */@Testpublic void deleteAll(){//   DeleteByQueryAction.INSTANCE.newRequestBuilder(client)//         .source(article)//         .filter(QueryBuilders.matchAllQuery())//         .get();}/** * bulk批量通过指定id删除方法 */@Testpublic void batchUndercarriageFamilies() {   List<String> publishIds=new ArrayList<>();   publishIds.add("AV49wyfCWmWw7AxKFxeY");   publishIds.add("AV49wyfCWmWw7AxKFxea");   BulkRequestBuilder builder=client.prepareBulk();   for(String publishId:publishIds){  System.out.println(publishId);      builder.add(client.prepareDelete(article, content, publishId).request());         }   BulkResponse bulkResponse = builder.get();   System.out.println(bulkResponse.status());}/** * -----------------------------------------改() *//** * 更新文档 * @throws Exception */@Testpublic void updateDocument() throws Exception{Date time = new Date();//创建修改请求UpdateRequest updateRequest = new UpdateRequest();updateRequest.index(article);updateRequest.type(content);updateRequest.id("AV4xv5gAZLX8AvCc6ZWZ");updateRequest.doc(XContentFactory.jsonBuilder().startObject().field("author","FKSE").field("title","JAVA思想").field("content","注意:这是JAVA有关的书籍").field("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time)).endObject());UpdateResponse response = client.update(updateRequest).get();System.out.println("更新索引成功");}/** * -----------------------------有问题:要引入:reindex *//** * UpdateByQueryRequestBuilder * @throws Exception */    @Test    public void updateByQueryRequestBuilder() throws Exception {//        UpdateByQueryRequestBuilder updateByQueryRequestBuilder = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);//        updateByQueryRequestBuilder//                .script(new Script(ScriptType.INLINE,"painless","ctx_source.likes++",null))//                .source()//                .setQuery(QueryBuilders.termQuery("author","kkkkk"))//                .setIndices(article)//                .get();    }        /**     * updateByQueryRequestBuilders     */    @Test    public void updateByQueryRequestBuilders(){    //    Map<String, Object> maps=new HashMap<>();//    maps.put("orgin_session_id", 10);//    maps.put("orgin_session_id", 11);//    maps.put("orgin_session_id", 12);//    maps.put("orgin_session_id", 13);//    //    Set<Map<String, Object>> docs = new HashSet<>();//    docs.add(maps);//    //    UpdateByQueryRequestBuilder  ubqrb = UpdateByQueryAction.INSTANCE.newRequestBuilder(client);//        for (Map<String, Object> doc : docs) {//            if (doc==null || doc.isEmpty()){//                return;//            }//            Script script = new Script("ctx._source.price = ctx._version");//            //            System.out.println(doc.get("orgin_session_id"));//            //            //BulkIndexByScrollResponse//            BulkByScrollResponse scrollResponse = ubqrb.source(article).script(script)//                            .filter(QueryBuilders.matchAllQuery()).get();//            for (BulkItemResponse.Failure failure : scrollResponse.getBulkFailures()) {//            System.out.println(failure.getMessage());//            }//        }    }    /**     * prepareUpdate     * @throws Exception     */    @Test    public void prepareUpdate() throws Exception {            XContentBuilder endObject = XContentFactory.jsonBuilder().startObject().field("author","AAAAAAAAAAAAAAA").endObject();        UpdateResponse response = client.prepareUpdate(article, content, "AV49wyfCWmWw7AxKFxeb").setDoc(endObject).get();        System.out.println(response.getVersion());            }        /** * -----------------------------------------查() */        /** * 根据index、type、id进行查询 */@Testpublic void searchByIndex(){GetResponse response = client.prepareGet(article,content,"AV49wyfCWmWw7AxKFxec").execute()                  .actionGet();          String json = response.getSourceAsString();          if (null != json) {          System.out.println(json);        } else {              System.out.println("未查询到任何结果!");          }  }        /**     * 查询article索引下的所有数据      * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-query-dsl-match-all-query.html'>     * @throws Exception     */@Test    public  void matchAllQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();        SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit searchHit : response.getHits()) {            println(searchHit);        }    }/** * 查询article索引下的articledate的所有数据  * @throws Exception */@Test    public void searchmethod1() throws Exception{        SearchResponse response = client.prepareSearch(article).setTypes(content).get();        println(response);        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/** * spanFirstQuery */@Testpublic void spanFirstQuery(){ // Span First  QueryBuilder queryBuilder =QueryBuilders.spanFirstQuery(                  QueryBuilders.spanTermQuery("title", "C"),  // Query                  30000                                             // Max查询范围的结束位置          );        SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit searchHit : response.getHits()) {            println(searchHit);        }}/** * spanNearQuery */@Testpublic void spanNearQuery(){          // Span Near TODO NotSolved  QueryBuilder queryBuilder =QueryBuilders.spanNearQuery(QueryBuilders.spanTermQuery("title", "C"),1000)                  .addClause(QueryBuilders.spanTermQuery("name", "葫芦580娃")) // Span Term Queries                  .addClause(QueryBuilders.spanTermQuery("name", "葫芦3812娃"))                  .addClause(QueryBuilders.spanTermQuery("name", "葫芦7139娃"));        SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit searchHit : response.getHits()) {            println(searchHit);        }}/** * spanNotQuery */@Testpublic void spanNotQuery(){ // Span Not TODO NotSolved  QueryBuilder queryBuilder =QueryBuilders.spanNotQuery(QueryBuilders.spanTermQuery("title", "C"), null);          SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit searchHit : response.getHits()) {            println(searchHit);        }}/** * spanOrQuery */@Testpublic void spanOrQuery(){QueryBuilder queryBuilder =QueryBuilders.spanOrQuery(QueryBuilders.spanTermQuery("title", "C"));        SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit searchHit : response.getHits()) {            println(searchHit);        }}public void moreLikeThisQuery(){} /**     * 指定单查询条件     * <a 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'>     * @throws Exception     */@Test    public  void matchQuery() throws Exception{        QueryBuilder qb = QueryBuilders.matchQuery(                "title" ,                 "C"               );        SearchResponse response = client.prepareSearch(article).setQuery(qb).get();        for (SearchHit searchHit : response.getHits()) {            println(searchHit);        }    }/**     * termQuery 查询     * @throws Exception     */@Testpublic void termQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.termQuery("id","11");        SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/**     * termQuery 查询     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>     * @throws Exception     */@Test    public  void termsQuerys() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.termsQuery("id","1","2");            SearchResponse response = client.prepareSearch("article").setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    } /**     * 范围查询RangeQuery     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>     * @throws Exception     */@Test    public void rangeQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.rangeQuery("price")                   .from(1)                                            .to(100)                                             .includeLower(false)                                 .includeUpper(false);        // A simplified form using gte, gt, lt or lte        QueryBuilder _qb = QueryBuilders.rangeQuery("price")               .gte("10")                                    .lt("20");        SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/** * multiMatchQuery 查询   * multiMatchQuery针对的是多个field,当fieldNames有多个参数时,如field1和field2,那查询的结果中,要么field1中包含text,要么field2中包含text。 */@Testpublic void multiMatchQuery(){QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("JAVA编程思想","title", "content");SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }}/** * MultiMatchQueryBuilder * <a 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'> * @throws Exception */    @Test    public void MultiMatchQueryBuilder() throws Exception {        MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery("JAVA编程思想","title", "content");        multiMatchQueryBuilder.analyzer("standard");        multiMatchQueryBuilder.cutoffFrequency(0.001f);        multiMatchQueryBuilder.field("title",20);        multiMatchQueryBuilder.fuzziness(Fuzziness.TWO);        multiMatchQueryBuilder.maxExpansions(100);        multiMatchQueryBuilder.prefixLength(10);        multiMatchQueryBuilder.tieBreaker(20);        multiMatchQueryBuilder.type(MultiMatchQueryBuilder.Type.BEST_FIELDS);        multiMatchQueryBuilder.boost(20);       SearchResponse searchResponse =  client.prepareSearch()                .setIndices(article)                .setTypes(content)                .setQuery(multiMatchQueryBuilder)                .execute()                .actionGet();       for (SearchHit  searchHit: searchResponse.getHits()) {           println(searchHit);       }    }            /**     * MatchQueryBuilder     * @throws Exception     */    @Test    public void MatchQueryBuilder() throws Exception {            MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title","JAVA编程思想");        matchQueryBuilder.fuzziness(Fuzziness.AUTO);        SearchResponse searchResponse = client.prepareSearch()                .setIndices(article)                .setTypes(content)                .setQuery(matchQueryBuilder)                .execute()                .actionGet();        println(searchResponse);    }     /**     * 和matchQuery一样     * <a 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'>     * @throws Exception     */@Test    public  void commonTermsQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.commonTermsQuery("id",                    "1");SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/** * MultiGetResponse  查询多个xxx的值 * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-multi-get.html'> * @throws Exception */    @Test    public void MultiGetResponse() throws Exception {        MultiGetResponse multiGetItemResponses = client.prepareMultiGet()                .add(article, content, "526")                .add(article, content, "572", "582", "613")                .get();        for (MultiGetItemResponse itemResponse : multiGetItemResponses) {            GetResponse response = itemResponse.getResponse();            if (response.isExists()) {                String json = response.getSourceAsString();                System.out.println(json);            }        }    }    /**     * +包含 -除外     * <a 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'>     * @throws Exception     */@Test    public void queryStringQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("*:*");       SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/**     * +包含 -除外     * <a 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'>     * @throws Exception     */@Test    public void simpleQueryStringQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.simpleQueryStringQuery("+id:1");         SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    } /**     * existsQuery     * 匹配含有id字段的记录     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>     * @throws Exception     */@Test    public void existsQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.existsQuery("id"); SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    } /**     * prefixQuery  匹配包含具有指定前缀的术语的文档的查询     * 匹配title中前缀为JAVA的记录     * 匹配分词前缀 如果字段没分词,就匹配整个字段前缀     * 前缀匹配(比如我要查询的是192.168.1.12,但是当输入192.168、192.168.1、192.168.1.1等的情况都会有相应结果返回,只不过是个范围)     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>     * @throws Exception     */@Test    public void prefixQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.prefixQuery(                "title",                    "192.138"                 );SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/** * MatchPhrasePrefixQueryBuilder  为提供的字段名称和文本创建一个类型为“PHRASE_PREFIX”的匹配查询。 * @throws Exception */    @Test    public void MatchPhrasePrefixQueryBuilder() throws Exception {        String key = "C++";        MatchPhrasePrefixQueryBuilder matchPhrasePrefixQueryBuilder = QueryBuilders.matchPhrasePrefixQuery("title",key);        matchPhrasePrefixQueryBuilder.boost(10);        matchPhrasePrefixQueryBuilder.analyzer("standard");        matchPhrasePrefixQueryBuilder.slop(2);        matchPhrasePrefixQueryBuilder.maxExpansions(100);        SearchResponse searchResponse = client.prepareSearch()                .setIndices(article)                .setTypes(content)                .setQuery(matchPhrasePrefixQueryBuilder)                .execute()                .actionGet();        for (SearchHit  searchHit: searchResponse.getHits()) {            println(searchHit);        }    }/**     * wildcardQuery     * 通配符     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>     * @throws Exception     */@Test    public void wildcardQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("author", "*e");//J?V*SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }    /**     * fuzzyQuery  使用模糊查询匹配文档的查询     * @throws Exception     */@Test    public  void fuzzyQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery(                "author",                     "e"                );SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/** * boolQuery 匹配与其他查询的布尔组合匹配的文档的查询。 * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'> * @throws Exception */@Testpublic void BoostQuery() throws Exception{        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery()                .should(QueryBuilders.termQuery("author","eeee")).boost(100) //设置此查询的权重。 匹配此查询的文件(除正常权重之外)的得分乘以提供的提升。                .should(QueryBuilders.termQuery("id","AV5NF_Dbhqf-jFOFkksT").boost(1));        SearchResponse response=client.prepareSearch("article").setQuery(boolQueryBuilder).execute().get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }        }/** * boolQuery * @throws Exception */    @Test    public void boolQuery() throws Exception {        QueryBuilder qb = QueryBuilders.boolQuery()                .must(QueryBuilders.termQuery("author", "eeee"))                .must(QueryBuilders.termQuery("title", "JAVA思想"))                .mustNot(QueryBuilders.termQuery("content", "C++")) //添加不得出现在匹配文档中的查询。                .should(QueryBuilders.termQuery("id", "AV5NF_Dbhqf-jFOFkksT"))//添加应该与返回的文档匹配的子句。 对于具有no的布尔查询,子句必须一个或多个SHOULD子句且必须与文档匹配,用于布尔值查询匹配。 不允许null值。                .filter(QueryBuilders.termQuery("price", "30.3"));//添加一个查询,必须出现在匹配的文档中,但会不贡献得分。 不允许null值。        SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();                for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }    /**     * boostingQuery     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>     * @throws Exception     */    @Test    public void boostingQuery() throws Exception {        QueryBuilder qb = QueryBuilders.boostingQuery(                QueryBuilders.termQuery("id","AV5NF_Dbhqf-jFOFkksR"),                QueryBuilders.termQuery("title","C"))                .negativeBoost(0.2f);//设置负增强因子。        SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();                for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }                /**     * constantScoreQuery     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>     * @throws Exception     */    @Test    public void constantScoreQuery() throws Exception {        QueryBuilder qb = QueryBuilders.constantScoreQuery(                QueryBuilders.termQuery("title","C")        ).boost(2.0f);        SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }        /**     * disMaxQuery     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>     * @throws Exception     */    @Test    public void disMaxQuery() throws Exception {        QueryBuilder qb = QueryBuilders.disMaxQuery()                .add(QueryBuilders.termQuery("id", "512"))                .add(QueryBuilders.termQuery("author", "ckse"))                .boost(1.2f)                .tieBreaker(0.7f);        SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }            /**     * functionScoreQuery     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-compound-queries.html'>     * @throws Exception     */    @Test    public void functionScoreQuery() throws Exception {        FunctionScoreQueryBuilder.FilterFunctionBuilder[] functions = {                new FunctionScoreQueryBuilder.FilterFunctionBuilder(                        QueryBuilders.matchQuery("id", "512"),                        ScoreFunctionBuilders.randomFunction("ABCDEF")),                new FunctionScoreQueryBuilder.FilterFunctionBuilder(                        ScoreFunctionBuilders.exponentialDecayFunction("age", 0L, 1L))        };        QueryBuilder qb = QueryBuilders.functionScoreQuery(functions);        SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }        /** * regexpQuery 匹配包含具有指定正则表达式的术语的文档的查询。 * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'> * @throws Exception */    @Test    public void regexpQuery() throws Exception {        QueryBuilder qb = QueryBuilders.regexpQuery(                "title",                "*J");        SearchResponse response=client.prepareSearch().setQuery(qb).execute().actionGet();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }    /**     * typeQuery     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>     * @throws Exception     */@Test    public  void typeQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.typeQuery("data");SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }    /**     * idsQuery     * 类型是可选的     * 指定type和id进行查询。     * <a href='https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-term-level-queries.html'>     * @throws Exception     */@Test    public  void idsQuery() throws Exception{        QueryBuilder queryBuilder = QueryBuilders.idsQuery(content)                 .addIds("512", "520", "531");SearchResponse response = client.prepareSearch(article).setQuery(queryBuilder).get();        for (SearchHit  searchHit: response.getHits()) {            println(searchHit);        }    }/** * group 分组查询 */@Testpublic void group(){}/** * Aggregation */    @Test    public void Aggregation()    {    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();  //添加时间范围过滤          boolQueryBuilder.must(QueryBuilders.rangeQuery("@timestamp").format("yyyy-MM-dd HH:mm:ss").gte("").lte(""));          AggregationBuilder aggregationBuilder = AggregationBuilders        //terms(查询字段别名).field(分组字段)                 .terms("").field("")                  .order(Terms.Order.aggregation("", false))                  .size(10)                  .subAggregation(AggregationBuilders.count("").field(""));          SearchRequestBuilder searchRequestBuilder = client.prepareSearch("article").setTypes("articledate")                  .setQuery(boolQueryBuilder)                  .addAggregation(aggregationBuilder)                  .setSize(0);            SearchResponse sr = searchRequestBuilder.execute().actionGet();          Terms genders = sr.getAggregations().get("");//统计字段别名        for (Terms.Bucket entry : genders.getBuckets()) {   System.out.println((String) entry.getKey()+"-("+entry.getDocCount()+")"); }                        //如想group by 时间,并且按天来进行分组        AggregationBuilder aggregation = AggregationBuilders                  .dateHistogram("agg")                  .field("@timestamp")                  .format("yyyy-MM-dd")                  .dateHistogramInterval(DateHistogramInterval.DAY);         //可能有新需求,group by 时间,姓名        //AggregationBuilder nameAgg = AggregationBuilders.terms(姓名别名).field(姓名).size(10);          //aggregation.subAggregation(nameAgg);                 //可以能需要进行名称统计,但是需要distinct        //aggregation.subAggregation(AggregationBuilders.cardinality(别名).field(姓名))                 //其他如下//        (1)统计某个字段的数量  //        ValueCountBuilder vcb=  AggregationBuilders.count("count_uid").field("uid");  //      (2)去重统计某个字段的数量(有少量误差)  //       CardinalityBuilder cb= AggregationBuilders.cardinality("distinct_count_uid").field("uid");  //      (3)聚合过滤  //      FilterAggregationBuilder fab= AggregationBuilders.filter("uid_filter").filter(QueryBuilders.queryStringQuery("uid:001"));  //      (4)按某个字段分组  //      TermsBuilder tb=  AggregationBuilders.terms("group_name").field("name");  //      (5)求和  //      SumBuilder  sumBuilder= AggregationBuilders.sum("sum_price").field("price");  //      (6)求平均  //      AvgBuilder ab= AggregationBuilders.avg("avg_price").field("price");  //      (7)求最大值  //      MaxBuilder mb= AggregationBuilders.max("max_price").field("price");   //      (8)求最小值  //      MinBuilder min= AggregationBuilders.min("min_price").field("price");  //      (9)按日期间隔分组  //      DateHistogramBuilder dhb= AggregationBuilders.dateHistogram("dh").field("date");  //      (10)获取聚合里面的结果  //      TopHitsBuilder thb=  AggregationBuilders.topHits("top_result");  //      (11)嵌套的聚合  //      NestedBuilder nb= AggregationBuilders.nested("negsted_path").path("quests");  //      (12)反转嵌套  //      AggregationBuilders.reverseNested("res_negsted").path("kps ");                      }/** * MultiSearchResponse 多字段检索 */@Testpublic void MultiSearchResponse(){SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery("JAVA"));        SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("title", "C"));        MultiSearchResponse sr = client.prepareMultiSearch().add(srb1).add(srb2).get();        for (MultiSearchResponse.Item item : sr.getResponses()) {            SearchResponse response = item.getResponse();            for (SearchHit searchHit : response.getHits()) {                println(searchHit);            }        }}/** * 复杂查询 */@Testpublic void complexSearch1(){int page=1;int pageSize=10;String keyword="";BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();if(keyword!=null&&!keyword.equals("")){   QueryBuilder nameBuilder=QueryBuilders.matchQuery("zuName", keyword).analyzer("ik_max_word").boost(10);   QueryBuilder labelBuilder=QueryBuilders.matchQuery("zuLabelName", keyword).analyzer("ik_max_word").boost(10);   QueryBuilder categoryBuilder=QueryBuilders.matchQuery("categoryName", keyword).analyzer("ik_max_word").boost(10);   boolQueryBuilder.should(nameBuilder).should(labelBuilder).should(categoryBuilder);}else{   boolQueryBuilder.must(QueryBuilders.matchAllQuery());}SearchResponse response=client.prepareSearch("article").setTypes("articledate")      .setQuery(boolQueryBuilder)      .setFrom((page-1)*pageSize).setSize(pageSize)      .setExplain(true)      .get();SearchHits hits=response.getHits();}/** * 复杂查询2 */@Testpublic void complexSearch2(){String relatedValue="fendo";String userId="1234";int page=1;int pageSize=10;BoolQueryBuilder builders=new BoolQueryBuilder();//加上条件builders.must(QueryBuilders.termQuery("userId", userId));if(relatedValue=="fendo"){   builders.must(QueryBuilders.nestedQuery("related4ZuValue",         QueryBuilders.boolQuery()                  .must(QueryBuilders.termQuery("related4ZuValue.nameValue", ""))                  //.must(QueryBuilders.rangeQuery("endTime").lte(LongformStringDate(System.currentTimeMillis())))         ,ScoreMode.None));}else{   builders.must(QueryBuilders.nestedQuery("related4ZuValue", QueryBuilders.termQuery("related4ZuValue.nameValue", ""),          ScoreMode.None));}SearchResponse response=client.prepareSearch("article").setTypes("articledate")      .setQuery(builders).setFrom((page-1)*pageSize)      .setSize(pageSize)      .get();SearchHits hits=response.getHits();}/** * 取查询结果总和count */@Testpublic void countSum() {   int relatedValue=1;   String userId="111";   BoolQueryBuilder builders=new BoolQueryBuilder();   builders.must(QueryBuilders.termQuery("userId", userId));   if(relatedValue==1){   builders.must(QueryBuilders.nestedQuery("related4ZuValue",QueryBuilders.boolQuery()                     .must(QueryBuilders.termQuery("related4ZuValue.nameValue", "123"))                     .must(QueryBuilders.rangeQuery("endTime").lte(""))            ,ScoreMode.None));                        }else{      builders.must(QueryBuilders.nestedQuery("related4ZuValue", QueryBuilders.termQuery("related4ZuValue.nameValue", "111"),             ScoreMode.None));   }   SearchResponse response=client.prepareSearch("article").setTypes("articledate")         .setQuery(builders)         .setSize(1)         .get();   SearchHits hits=response.getHits();   System.out.println(hits.getTotalHits());}/** * 聚合求和sum * @param keyword * @param startTime * @param endTime */@Testpublic void getPlatformZuOrdersTotalAmount() {   String keyword="";   String startTime="";   String endTime="";   BoolQueryBuilder boolQueryBuilder=QueryBuilders.boolQuery();   if(keyword==null||keyword.equals("")){      QueryBuilder queryBuilder=QueryBuilders.matchAllQuery();      boolQueryBuilder.must(queryBuilder);   }else{      QueryBuilder zuNameBuilder=QueryBuilders.matchQuery("zuName", keyword);      QueryBuilder buyerNameBuilder=QueryBuilders.matchQuery("buyerName", keyword);      QueryBuilder sellerNameBuilder=QueryBuilders.matchQuery("sellerName", keyword);      boolQueryBuilder.should(zuNameBuilder).should(buyerNameBuilder).should(sellerNameBuilder);         }   if(!startTime.equals("")){      QueryBuilder addTimeBuilder=QueryBuilders.rangeQuery("addTime").from(startTime).to(endTime);      boolQueryBuilder.must(addTimeBuilder);   }   SearchResponse response=client.prepareSearch("article").setTypes("articledate")         .setQuery(boolQueryBuilder)         .addAggregation(AggregationBuilders.sum("price").field("price"))         .get();   Sum sum=response.getAggregations().get("price");   System.out.println(sum.getValue());}/** * ---------------------------分页 *//** * 使用Scroll方法分页 */@Testpublic void queryPageScroll(){QueryBuilder qb = QueryBuilders.termQuery("id", "1");        SearchResponse scrollResp = client.prepareSearch("article")                .addSort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC)                .setScroll(new TimeValue(60000))                .setQuery(qb)                .setSize(1).get();         do {            for (SearchHit hit : scrollResp.getHits().getHits()) {                println(hit);            }            scrollResp = client.prepareSearchScroll(scrollResp.getScrollId()).setScroll(new TimeValue(60000)).execute().actionGet();        } while(scrollResp.getHits().getHits().length != 0); }/**     * 分页     * @throws Exception     */@Test    public void fenye() throws Exception {        SearchResponse response = client.prepareSearch("article")                .setQuery(QueryBuilders.matchAllQuery())                .setFrom(10)                 .setSize(20)                .execute().actionGet();        for (SearchHit searchHit : response.getHits()) {            println(searchHit);        }    }    /**     * 高亮     * @throws Exception     */@Test    public void highlighter() throws Exception{         QueryBuilder matchQuery = QueryBuilders.matchQuery("author", "fendo");            HighlightBuilder hiBuilder=new HighlightBuilder();            hiBuilder.preTags("<h2>");            hiBuilder.postTags("</h2>");            hiBuilder.field("author");            // 搜索数据            SearchResponse response = client.prepareSearch("article")                    .setQuery(matchQuery)                    .highlighter(hiBuilder)                    .execute().actionGet();            for (SearchHit searchHit : response.getHits()) {                println(searchHit);            }    }/** * ---------------------------分词器 *//** * AnalyzeRequest 分词器 * <a href='https://www.elastic.co/guide/cn/elasticsearch/guide/current/standard-tokenizer.html'> * @throws Exception */    @Test    public void AnalyzeRequest() throws Exception {        AnalyzeRequest analyzeRequest = new AnalyzeRequest();        analyzeRequest.text("My œsophagus caused a débâcle");        /**         * whitespace (空白字符)分词器按空白字符 —— 空格、tabs、换行符等等进行简单拆分         * letter 分词器 ,采用另外一种策略,按照任何非字符进行拆分         * standard 分词器使用 Unicode 文本分割算法         */        analyzeRequest.addTokenFilter("standard");        analyzeRequest.addCharFilter("asciifolding");        ActionFuture<AnalyzeResponse> analyzeResponseActionFuture =  client.admin().indices().analyze(analyzeRequest);        List<AnalyzeResponse.AnalyzeToken> analyzeTokens =  analyzeResponseActionFuture.actionGet().getTokens();        for (AnalyzeResponse.AnalyzeToken analyzeToken : analyzeTokens){            System.out.println(analyzeToken.getTerm());        }    }    /**     * IK分词器     * @param args     * @throws IOException     */    public  void IKAnalyzer(String []args) throws IOException {        Settings settings  = Settings.EMPTY;        IKAnalyzer analyzer = new IKAnalyzer();        String text = "中华人民共和国国歌";        StringReader stringReader = new StringReader(text);        TokenStream tokenStream = analyzer.tokenStream("",stringReader);        tokenStream.reset();        CharTermAttribute term=tokenStream.getAttribute(CharTermAttribute.class);        while(tokenStream.incrementToken()){            System.out.print(term.toString()+"—");        }        stringReader.close();        tokenStream.close();    }       /**     * 输出结果SearchResponse     * @param response     */    public static void println(SearchResponse response){        System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-");        System.err.println(                "getFailedShards : " + response.getFailedShards() + "\n" +                "getNumReducePhases : " + response.getNumReducePhases() + "\n" +                "getScrollId : " + response.getScrollId() +  "\n" +                "getTookInMillis : " + response.getTookInMillis() + "\n" +                 "getTotalShards : " + response.getTotalShards() +  "\n" +                "getAggregations : " + response.getAggregations() + "\n" +                 "getProfileResults : " + response.getProfileResults() + "\n" +                 "getShardFailures : " + response.getShardFailures() + "\n" +                 "getSuggest : " + response.getSuggest() + "\n" +                 "getTook : " + response.getTook() + "\n" +                 "isTerminatedEarly : " + response.isTerminatedEarly() + "\n" +                 "isTimedOut : " + response.isTimedOut() + "\n" +                 "remoteAddress : " + response.remoteAddress() + "\n" +                 "status : " + response.status() + "\n" +                 "getHits : " + response.getHits()                 );    }    /**     * 输出结果SearchResponse     * @param response     */    public static void println(SearchHit searchHit){        System.err.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-");        System.err.println(                 "docId : " + searchHit.docId() + "\n" +                "getId : " + searchHit.getId() + "\n" +                "getIndex : " + searchHit.getIndex()+ "\n" +                "getScore : " + searchHit.getScore() + "\n" +                "getSourceAsString : " + searchHit.getSourceAsString() + "\n" +                "getType : " + searchHit.getType() + "\n" +                "getVersion : " + searchHit.getVersion() + "\n" +                "fieldsOrNull : " + searchHit.fieldsOrNull() + "\n" +                "getExplanation : " + searchHit.getExplanation() + "\n" +                "getFields : " + searchHit.getFields() + "\n" +                "highlightFields : " + searchHit.highlightFields() + "\n" +                "hasSource : " + searchHit.hasSource()                );    }}


完整项目如下:http://download.csdn.net/download/u011781521/9964499

阅读全文
2 0