ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)


ElasticSearch6.0  Java API  使用     排序,分组 ,创建索引,添加索引数据,打分等

如果此文章对你有帮助,请关注一下哦

1.1 搭建maven 工程  创建web工程

  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.elastic</groupId>
  5   <artifactId>search-service</artifactId>
  6   <packaging>war</packaging>
  7   <version>1.0-SNAPSHOT</version>
  8   <name>search-service Maven Webapp</name>
  9   <url>http://maven.apache.org</url>
 10   <properties>
 11     <junit.version>4.5</junit.version>
 12     <spring.version>4.2.4.RELEASE</spring.version>
 13     <mybatis.version>3.2.8</mybatis.version>
 14     <mybatis.spring.version>1.2.2</mybatis.spring.version>
 15     <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
 16     <mysql.version>5.1.32</mysql.version>
 17     <slf4j.version>1.6.4</slf4j.version>
 18     <jackson.version>2.4.2</jackson.version>
 19     <druid.version>1.0.9</druid.version>
 20     <jstl.version>1.2</jstl.version>
 21     <servlet-api.version>2.5</servlet-api.version>
 22     <jsp-api.version>2.0</jsp-api.version>
 23     <joda-time.version>2.5</joda-time.version>
 24     <commons-lang3.version>3.3.2</commons-lang3.version>
 25     <commons-io.version>1.3.2</commons-io.version>
 26     <commons-net.version>3.3</commons-net.version>
 27     <jsqlparser.version>0.9.1</jsqlparser.version>
 28     <commons-fileupload.version>1.3.1</commons-fileupload.version>
 29     <jedis.version>2.7.2</jedis.version>
 30     <activemq.version>5.11.2</activemq.version>
 31     <quartz.version>2.2.2</quartz.version>
 32     <slf4j.version>1.7.21</slf4j.version>
 33     <log4j.version>1.2.12</log4j.version>
 34     <solr.version>6.1.0</solr.version>
 35     <fastjson.version>1.2.13</fastjson.version>
 36     <diamond.version>0.0.1-SNAPSHOT</diamond.version>
 37     <cors.filter>2.5</cors.filter>
 38     <java.property.utils>1.10</java.property.utils>
 39     <jackson.version>2.4.2</jackson.version>
 40   </properties>
 41   <dependencies>
 42     <dependency>
 43       <groupId>junit</groupId>
 44       <artifactId>junit</artifactId>
 45       <version>3.8.1</version>
 46       <scope>test</scope>
 47     </dependency>
 48     <dependency>
 49       <groupId>org.elasticsearch.client</groupId>
 50       <artifactId>transport</artifactId>
 51       <version>6.0.0</version>
 52     </dependency>
 53     <dependency>
 54       <groupId>org.slf4j</groupId>
 55       <artifactId>jcl-over-slf4j</artifactId>
 56       <version>1.7.21</version>
 57       <scope>runtime</scope>
 58     </dependency>
 59     <dependency>
 60       <groupId>org.slf4j</groupId>
 61       <artifactId>slf4j-api</artifactId>
 62       <version>1.7.21</version>
 63     </dependency>
 64     <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
 65     <dependency>
 66       <groupId>org.slf4j</groupId>
 67       <artifactId>slf4j-log4j12</artifactId>
 68       <scope>runtime</scope>
 69     </dependency>
 70     <!-- https://mvnrepository.com/artifact/log4j/log4j -->
 71     <dependency>
 72       <groupId>log4j</groupId>
 73       <artifactId>log4j</artifactId>
 74       <version>1.2.17</version>
 75     </dependency>
 76     <dependency>
 77       <groupId>commons-logging</groupId>
 78       <artifactId>commons-logging</artifactId>
 79       <version>1.2</version>
 80     </dependency>
 81     <dependency>
 82       <groupId>junit</groupId>
 83       <artifactId>junit</artifactId>
 84       <scope>test</scope>
 85     </dependency>
 86     <dependency>
 87       <groupId>javax.servlet</groupId>
 88       <artifactId>servlet-api</artifactId>
 89       <version>2.5</version>
 90       <scope>provided</scope>
 91     </dependency>
 92     <dependency>
 93       <groupId>com.alibaba</groupId>
 94       <artifactId>fastjson</artifactId>
 95     </dependency>
 96     <!-- spring dependencies -->
 97     <dependency>
 98       <groupId>org.springframework</groupId>
 99       <artifactId>spring-core</artifactId>
100       <version>${spring.version}</version>
101       <!--<exclusions>-->
102       <!--<exclusion>-->
103       <!--<groupId>commons-logging</groupId>-->
104       <!--<artifactId>commons-logging</artifactId>-->
105       <!--</exclusion>-->
106       <!--</exclusions>-->
107     </dependency>
108     <dependency>
109       <groupId>org.springframework</groupId>
110       <artifactId>spring-test</artifactId>
111       <version>${spring.version}</version>
112     </dependency>
113     <dependency>
114       <groupId>org.springframework</groupId>
115       <artifactId>spring-context</artifactId>
116       <version>${spring.version}</version>
117     </dependency>
118     <dependency>
119       <groupId>org.springframework</groupId>
120       <artifactId>spring-context-support</artifactId>
121       <version>${spring.version}</version>
122     </dependency>
123     <dependency>
124       <groupId>org.springframework</groupId>
125       <artifactId>spring-aop</artifactId>
126       <version>${spring.version}</version>
127     </dependency>
128     <dependency>
129       <groupId>org.springframework</groupId>
130       <artifactId>spring-aspects</artifactId>
131       <version>${spring.version}</version>
132     </dependency>
133     <dependency>
134       <groupId>org.springframework</groupId>
135       <artifactId>spring-tx</artifactId>
136       <version>${spring.version}</version>
137     </dependency>
138     <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
139     <dependency>
140       <groupId>org.springframework</groupId>
141       <artifactId>spring-jdbc</artifactId>
142       <version>${spring.version}</version>
143     </dependency>
144 
145     <dependency>
146       <groupId>org.springframework</groupId>
147       <artifactId>spring-webmvc</artifactId>
148       <version>${spring.version}</version>
149     </dependency>
150     <!-- mysql dependencies -->
151     <dependency>
152       <groupId>mysql</groupId>
153       <artifactId>mysql-connector-java</artifactId>
154       <version>5.1.32</version>
155     </dependency>
156     <!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
157     <dependency>
158       <groupId>com.thetransactioncompany</groupId>
159       <artifactId>cors-filter</artifactId>
160       <version>${cors.filter}</version>
161     </dependency>
162     <!-- https://mvnrepository.com/artifact/com.thetransactioncompany/java-property-utils -->
163     <dependency>
164       <groupId>com.thetransactioncompany</groupId>
165       <artifactId>java-property-utils</artifactId>
166       <version>${java.property.utils}</version>
167 
168     </dependency>
169     <dependency>
170       <groupId>com.alibaba</groupId>
171       <artifactId>fastjson</artifactId>
172       <version>${fastjson.version}</version>
173     </dependency>
174   </dependencies>
175   <build>
176     <finalName>search-service</finalName>
177   </build>
178 </project>

 

1.2 创建web项目

 

 

 

2.1  编写Java  elasticsearch 客户端连接公共类  (这里使用elasticsearch单机版)

 1 package com.elastic.common.conn;
 2 
 3 import org.elasticsearch.client.transport.TransportClient; 4 import org.elasticsearch.common.settings.Settings; 5 import org.elasticsearch.common.transport.TransportAddress; 6 import org.elasticsearch.transport.client.PreBuiltTransportClient; 7 import org.springframework.stereotype.Component; 8 9 import java.net.InetAddress; 10 11 /** 12 * Created by xiaotian on 2017/12/1. 13 */ 14 @Component 15 public class EsClient { 16 17 //private EsClient client = new EsClient(); 18 TransportClient client = null; 19 public EsClient(){ 20 try{ 21 Settings settings = Settings.builder() 22 .put("client.transport.sniff", true) 23 .put("cluster.name", "elasticsearch").build(); 24 client = new PreBuiltTransportClient(Settings.EMPTY) 25 .addTransportAddress(new TransportAddress(InetAddress.getByName("eshost"), 9300)); 26 27 }catch (Exception ex){ 28  client.close(); 29 }finally { 30 31  } 32  } 33 public TransportClient getConnection(){ 34 35 if (client==null){ 36 synchronized (EsClient.class){ 37 if (client==null){ 38 new EsClient(); 39  } 40  } 41  } 42 return client; 43 44  } 45 46 }

 2.2  service层  接口设计 

1. IndexService
 1 package com.elastic.service.inter;
 2 
 3 /**
 4  * Created by xiaotian on 2017/12/1.
 5  */
 6 public interface IndexService { 7 8 public void index(String id); 9 10 public void get(); 11 public void del(String id); 12 public void update(String id) throws Exception; 13 public void multiGet(String ... ids) throws Exception; 14 public void bulk(String ... ids) throws Exception; 15 public void bulkProcesstor(String index,String type,String... ids) throws Exception; 16 17 }

 

2. SearchService

 1 package com.elastic.service.inter;
 2 
 3 /**
 4  * Created by xiaotian on 2017/12/2.
 5  */
 6 public interface SearchService { 7 public void search(); 8 public void searchByCondition() throws Exception; 9 public void multiSearch(); 10 public void aggsearch(); 11 public void metricsAgg(); 12 13 }

3. service层 接口实现 

  IndexServiceImpl 

 

  1 package com.elastic.service.impl;
  2 
  3 import com.alibaba.fastjson.JSONObject; 4 import com.elastic.common.conn.EsClient; 5 import com.elastic.service.inter.IndexService; 6 import org.elasticsearch.action.ActionListener; 7 import org.elasticsearch.action.admin.indices.mapping.put.PutMappingRequest; 8 import org.elasticsearch.action.admin.indices.mapping.put.PutMappingResponse; 9 import org.elasticsearch.action.bulk.*; 10 import org.elasticsearch.action.get.GetResponse; 11 import org.elasticsearch.action.get.MultiGetItemResponse; 12 import org.elasticsearch.action.get.MultiGetResponse; 13 import org.elasticsearch.action.index.IndexRequest; 14 import org.elasticsearch.action.index.IndexRequestBuilder; 15 import org.elasticsearch.action.index.IndexResponse; 16 import org.elasticsearch.client.Requests; 17 import org.elasticsearch.common.document.DocumentField; 18 import org.elasticsearch.common.unit.ByteSizeUnit; 19 import org.elasticsearch.common.unit.ByteSizeValue; 20 import org.elasticsearch.common.unit.TimeValue; 21 import org.elasticsearch.common.xcontent.XContentBuilder; 22 import org.elasticsearch.common.xcontent.XContentType; 23 import org.elasticsearch.index.query.QueryBuilders; 24 import org.elasticsearch.index.reindex.BulkByScrollResponse; 25 import org.elasticsearch.index.reindex.DeleteByQueryAction; 26 import org.elasticsearch.rest.RestStatus; 27 import org.springframework.beans.factory.annotation.Autowired; 28 import org.springframework.stereotype.Service; 29 30 import java.io.IOException; 31 import java.util.*; 32 33 import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder; 34 35 /** 36 * Created by xiaotian on 2017/12/1. 37 */ 38 @Service 39 public class IndexServiceImpl implements IndexService { 40 41  @Autowired 42 private EsClient client; 43 44 public void index(String id) { 45 // String json = "{" + 46 // "\"user\":\"kimchy\"," + 47 // "\"postDate\":\"2013-01-30\"," + 48 // "\"message\":\"trying out Elasticsearch\"" + 49 // "}"; 50 try { 51 52 53 Map<String, Object> jsonMap = new HashMap<String, Object>(); 54 jsonMap.put("name","jim"+id); 55 jsonMap.put("age",20+id); 56 jsonMap.put("date",new Date()); 57 jsonMap.put("message","测试"+id); 58 jsonMap.put("tel","1234567"); 59 //IndexResponse indexResponse = client.getConnection().prepareIndex("twitter", "tweet").setSource(JSONObject.toJSON(jsonMap), XContentType.JSON).get(); 60 IndexResponse indexResponse = client.getConnection().prepareIndex("xiaot", "test",id).setSource(jsonMap).get(); 61 // Index name 62 String _index = indexResponse.getIndex(); 63 // Type name 64 String _type = indexResponse.getType(); 65 // Document ID (generated or not) 66 String _id = indexResponse.getId(); 67 // Version (if it's the first time you index this document, you will get: 1) 68 long _version = indexResponse.getVersion(); 69 // status has stored current instance statement. 70 RestStatus status = indexResponse.status(); 71 System.out.println(_index+"_"+_type+"_"+_id+"_"+_version+"_"+status); 72 }catch (Exception ex){ 73  ex.printStackTrace(); 74  } 75 76  } 77 78 public void get() { 79 GetResponse response = client.getConnection().prepareGet("twitter", "tweet", "94pKEWABJOgzR6sJVCCV").get(); 80 Map<String, DocumentField> fields = response.getFields(); 81 System.out.println("map:"+fields); 82 String index = response.getIndex(); 83 Map<String, Object> source = response.getSource(); 84 String id = response.getId(); 85  System.out.println(source); 86 87  } 88 89 public void del(String id) { 90  DeleteByQueryAction.INSTANCE.newRequestBuilder(client.getConnection()) 91 .filter(QueryBuilders.matchQuery("_id",id)) 92 .source("twitter") 93 .execute(new ActionListener<BulkByScrollResponse>() { 94 public void onResponse(BulkByScrollResponse response) { 95 long deleted = response.getDeleted(); 96 System.out.println("delete"+deleted); 97  } 98 99 public void onFailure(Exception e) { 100 101  } 102  }); 103  } 104 105 public void update(String id) throws Exception{ 106 client.getConnection().prepareUpdate("twitter","tweet",id) 107  .setDoc(jsonBuilder() 108  .startObject() 109 .field("name", "tom") 110  .endObject()).get(); 111  } 112 113 public void multiGet(String... ids) throws Exception { 114 MultiGetResponse multiGetResponse = client.getConnection().prepareMultiGet() 115 .add("twitter", "tweet", ids[0]) 116 .add("twitter", "tweet", ids[1], ids[2], ids[3]) 117  .get(); 118 for (MultiGetItemResponse multiGetItemResponse : multiGetResponse) { 119 GetResponse response = multiGetItemResponse.getResponse(); 120 if (response.isExists()){ 121  System.out.println(response.getSourceAsString()); 122  } 123  } 124  } 125 126 public void bulk(String... ids) throws Exception { 127 BulkRequestBuilder prepareBulk = client.getConnection().prepareBulk(); 128 for (String id : ids) { 129 prepareBulk.add(client.getConnection().prepareIndex("twitter","tweet",id) 130 .setSource(jsonBuilder().startObject().field("name","肖添"+id).endObject())); 131 132  } 133 BulkResponse responses = prepareBulk.get(); 134  System.out.println(responses.hasFailures()); 135 for (BulkItemResponse response : responses) { 136 System.out.println(response.getResponse().getId() + "," + response.getResponse().getIndex() + "," + response.getResponse().getResult()); 137  } 138 139  } 140 141 public void bulkProcesstor(String index,String type,String... ids) throws Exception { 142 try { 143 144 //IndexResponse indexResponse = client.getConnection().prepareIndex(index, type).setSource(getMapping()).get(); 145 IndexResponse indexResponse = client.getConnection().prepareIndex(index, type).setSource().get(); 146 147 PutMappingRequest mappingRequest = Requests.putMappingRequest(index).type(type).source(getMapping()); 148 PutMappingResponse putMappingResponse = client.getConnection().admin().indices().putMapping(mappingRequest).actionGet(); 149 //client.getConnection().prepareIndex("temp1","test"). 150 BulkProcessor bulkProcessor = BulkProcessor.builder(client.getConnection(), new BulkProcessor.Listener() { 151 public void beforeBulk(long executionId, BulkRequest bulkRequest) { 152 System.out.println("beforeBulk:" + executionId + "," + bulkRequest.getDescription() + "," + bulkRequest.numberOfActions()); 153  } 154 155 public void afterBulk(long executionId, BulkRequest bulkRequest, BulkResponse bulkResponse) { 156 System.out.println("afterBulk:" + executionId + "," + bulkRequest.getDescription() + "," + bulkRequest.numberOfActions()); 157 System.out.println("afterBulk:" + executionId + "," + bulkResponse.getItems() + "," + bulkResponse.getTook()); 158  } 159 160 public void afterBulk(long executionId, BulkRequest bulkRequest, Throwable throwable) { 161 System.out.println("afterBulk:" + executionId + "," + bulkRequest.getParentTask() + "," + bulkRequest.getDescription() + "," + throwable); 162  } 163  }) 164 .setBulkActions(10) 165 .setBulkSize(new ByteSizeValue(5, ByteSizeUnit.MB)) 166 .setConcurrentRequests(1) 167 .setFlushInterval(TimeValue.timeValueMillis(1)) 168 .setBackoffPolicy(BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(100), 3)).build(); 169 170 for (String id : ids) { 171 Map<String, Object> jsonMap = new HashMap<String, Object>(); 172 jsonMap.put("name","中华人民共和国"+id); 173 jsonMap.put("age",30+Integer.parseInt(id)); 174 jsonMap.put("date",new Date()); 175 jsonMap.put("message","程序设计"+id); 176 jsonMap.put("tel","18612855433"); 177 jsonMap.put("attr_name",new String[]{"品牌_sku_attr"+id,"商品类别_sku_attr"+id,"面料_sku_attr"+id}); 178 jsonMap.put("create_date",new Date()); 179 bulkProcessor.add(new IndexRequest(index,type,id).source(jsonMap)); 180 181  } 182  bulkProcessor.close(); 183 } catch (Exception e) { 184  e.printStackTrace(); 185  System.out.println(e); 186 }finally { 187 188  } 189 190  } 191 192 private XContentBuilder getMapping() throws Exception{ 193 XContentBuilder mapping = null; 194 try { 195 196 mapping = jsonBuilder().startObject()//.startObject("_ttl").field("enabled",false).endObject() 197 .startObject("properties").startObject("name").field("type","text").field("analyzer","ik_max_word") 198 .field("search_analyzer","ik_max_word").endObject() 199 .startObject("age").field("type","long").endObject() 200 .startObject("date").field("type","date").endObject() 201 .startObject("message").field("type","keyword").field("index","true").endObject() 202 .startObject("tel").field("type","keyword").endObject() 203 .startObject("attr_name").field("type","keyword").field("index","true").endObject() 204  .endObject() 205  .endObject(); 206 } catch (IOException e) { 207  e.printStackTrace(); 208  } 209 210 return mapping; 211  } 212 }

SearchServiceImpl

  1 package com.elastic.service.impl;
  2 
  3 import com.elastic.common.conn.EsClient;
  4 import com.elastic.service.inter.SearchService;
  5 import org.apache.lucene.index.Term;
  6 import org.elasticsearch.action.search.MultiSearchResponse;
  7 import org.elasticsearch.action.search.SearchRequestBuilder;
  8 import org.elasticsearch.action.search.SearchResponse;
  9 import org.elasticsearch.action.search.SearchType;
 10 import org.elasticsearch.common.lucene.search.function.CombineFunction;
 11 import org.elasticsearch.common.lucene.search.function.FieldValueFactorFunction;
 12 import org.elasticsearch.index.query.*;
 13 import org.elasticsearch.index.query.functionscore.*;
 14 import org.elasticsearch.join.aggregations.Children;
 15 import org.elasticsearch.script.Script;
 16 import org.elasticsearch.script.ScriptService;
 17 import org.elasticsearch.script.ScriptType;
 18 import org.elasticsearch.search.SearchHit;
 19 import org.elasticsearch.search.SearchHits;
 20 import org.elasticsearch.search.aggregations.*;
 21 import org.elasticsearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
 22 import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator;
 23 import org.elasticsearch.search.aggregations.bucket.filter.InternalFilter;
 24 import org.elasticsearch.search.aggregations.bucket.range.Range;
 25 import org.elasticsearch.search.aggregations.bucket.range.RangeAggregationBuilder;
 26 import org.elasticsearch.search.aggregations.bucket.range.RangeAggregator;
 27 import org.elasticsearch.search.aggregations.bucket.terms.Terms;
 28 import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
 29 import org.elasticsearch.search.aggregations.metrics.avg.Avg;
 30 import org.elasticsearch.search.aggregations.metrics.avg.AvgAggregationBuilder;
 31 import org.elasticsearch.search.aggregations.metrics.max.Max;
 32 import org.elasticsearch.search.aggregations.metrics.max.MaxAggregationBuilder;
 33 import org.elasticsearch.search.aggregations.metrics.min.Min;
 34 import org.elasticsearch.search.aggregations.metrics.min.MinAggregationBuilder;
 35 import org.elasticsearch.search.aggregations.metrics.stats.Stats;
 36 import org.elasticsearch.search.aggregations.metrics.stats.StatsAggregationBuilder;
 37 import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
 38 import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStatsAggregationBuilder;
 39 import org.elasticsearch.search.aggregations.metrics.sum.Sum;
 40 import org.elasticsearch.search.aggregations.metrics.sum.SumAggregationBuilder;
 41 import org.elasticsearch.search.rescore.RescoreBuilder;
 42 import org.elasticsearch.search.sort.SortOrder;
 43 import org.slf4j.Logger;
 44 import org.springframework.beans.factory.annotation.Autowired;
 45 import org.springframework.stereotype.Service;
 46 
 47 import java.text.SimpleDateFormat;
 48 import java.util.HashMap;
 49 import java.util.List;
 50 import java.util.Map;
 51 
 52 import static org.elasticsearch.index.query.QueryBuilders.functionScoreQuery;
 53 
 54 /**
 55  * Created by xiaotian on 2017/12/2.
 56  */
 57 @Service
 58 public class SearchServiceImpl implements SearchService {
 59     @Autowired
 60     private EsClient client;
 61 
 62     private static final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(SearchServiceImpl.class);
 63 
 64     public void search() {
 65         SearchResponse searchResponse = client.getConnection().prepareSearch("twitter")
 66                 .setTypes("tweet")
 67                 .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
 68                 .setQuery(QueryBuilders.matchQuery("name","三胖子"))
 69                 .setPostFilter(QueryBuilders.rangeQuery("age").from(19).to(400))
 70                 .setFrom(0).setSize(20).setExplain(true)
 71                 //.addAggregation(AggregationBuilder.CommonFields.FIELD.match(""))
 72                 .get();
 73 
 74         SearchHits hits = searchResponse.getHits();
 75         for (SearchHit hit : hits) {
 76             System.out.println(hit.getSourceAsMap());
 77         }
 78     }
 79 
 80     public void searchByCondition()  throws Exception{
 81 
 82 
 83         SearchRequestBuilder searchRequestBuilder = client.getConnection().prepareSearch("red89")
 84                 .setTypes("test");
 85 
 86 
 87         Map<String, Object> params = new HashMap<>();
 88         params.put("num1", 1);
 89         params.put("num2", 2);
 90 
 91         String inlineScript = "long age;if (doc['age'].value < 45)  age = doc['age'].value + 50; return age * params.num1;";
 92                // + "return (diff +num1+num2)";
 93         Script script = new Script(ScriptType.INLINE,"painless",inlineScript , params);
 94         ScriptScoreFunctionBuilder scriptScoreFunctionBuilder = ScoreFunctionBuilders.scriptFunction(script);
 95 
 96 
 97 
 98         //MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("name", "中华");
 99 
100         searchRequestBuilder.setQuery(functionScoreQuery(QueryBuilders.matchQuery("name","中华").operator(Operator.AND),scriptScoreFunctionBuilder));
101        // searchRequestBuilder.setQuery(QueryBuilders.matchQuery("name","中华").operator(Operator.AND));
102         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
103         BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
104         getFilterQuery("tel",new String[]{"18612855433"},"AND",queryBuilder);
105        // getFilterQuery("name",new String[]{"中华人民共和国"},"AND",queryBuilder);
106 
107 
108         //getFilterQuery("age",new String[]{"40"},"AND",queryBuilder);
109         //getFilterQuery("message",new String[]{"程序设计19"},"AND",queryBuilder);
110         boolQueryBuilder.must(queryBuilder);
111         //boolQueryBuilder.must();
112        // boolQueryBuilder.must(getRangeFilterQuery("age",new Integer[]{null,45}));
113         //new_score = old_score * log(1 + factor * number_of_votes)
114 
115        FieldValueFactorFunctionBuilder age = ScoreFunctionBuilders.fieldValueFactorFunction("age").modifier(FieldValueFactorFunction.Modifier.LN1P).factor(10);
116         FieldValueFactorFunctionBuilder age1 = ScoreFunctionBuilders.fieldValueFactorFunction("age").modifier(FieldValueFactorFunction.Modifier.LN1P).factor(4);
117         FunctionScoreQueryBuilder.FilterFunctionBuilder[] filterFunctionBuilders =
118                 new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{new FunctionScoreQueryBuilder.FilterFunctionBuilder(age),new FunctionScoreQueryBuilder.FilterFunctionBuilder(age1)};
119         //FunctionScoreQueryBuilder scoreQueryBuilder = functionScoreQuery(boolQueryBuilder, filterFunctionBuilders).boostMode(CombineFunction.SUM);
120 
121        // FunctionScoreQueryBuilder functionScoreQueryBuilder = functionScoreQuery(boolQueryBuilder, scriptScoreFunctionBuilder);
122         searchRequestBuilder.setPostFilter(boolQueryBuilder);
123         searchRequestBuilder.setFrom(0);
124         searchRequestBuilder.setSize(20);
125         searchRequestBuilder.setExplain(true);
126 
127         TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("agg").field("attr_name");//.subAggregation(AggregationBuilders.topHits("top").from(0).size(10)).size(100);
128         RangeAggregationBuilder rangeAggregationBuilder = AggregationBuilders.range("range").field("age").addRange(0, 30).addRange(30,50).addRange(50,100);
129 
130         aggregationBuilder.size(100);
131 
132         AggregationBuilder filter = AggregationBuilders.filter("agg", boolQueryBuilder)
133                 .subAggregation(aggregationBuilder);
134 
135         searchRequestBuilder.addAggregation(filter);
136         searchRequestBuilder.addAggregation(rangeAggregationBuilder);
137        // searchRequestBuilder.addAggregation(filter);
138         //searchRequestBuilder.addSort("age",SortOrder.DESC);
139 
140 
141 
142 
143 
144         //打分
145         //searchRequestBuilder.addRescorer(RescoreBuilder.queryRescorer(QueryBuilders.functionScoreQuery(ScoreFunctionBuilders.fieldValueFactorFunction("age"))));
146 
147         SearchResponse searchResponse1 = searchRequestBuilder.get();
148 
149 
150         System.out.println("param:"+searchRequestBuilder.toString());
151 
152 
153 
154         System.out.println("aaaa"+searchResponse1.getAggregations().getAsMap());
155 
156 
157         InternalFilter aggFilter = searchResponse1.getAggregations().get("agg");
158         System.out.println(aggFilter.toString());
159         Terms agg = aggFilter.getAggregations().get("agg");
160 
161         agg.getBuckets().forEach(bucket ->{
162             System.out.println(bucket.getKey()+":"+bucket.getDocCount());
163         } );
164         System.out.println("--------------------------------");
165         Range range = searchResponse1.getAggregations().get("range");
166 
167         range.getBuckets().forEach(bucket ->{
168             //System.out.println(bucket.getKey()+":"+bucket.getDocCount());
169             //logger.info("key [{}], from [{}], to [{}], doc_count [{}]", bucket.getKey(), bucket.getFrom(),bucket.getTo(),bucket.getDocCount());
170             System.out.println(String.format("key [%s], from [%s], to [%s], doc_count [%d]", bucket.getKey(), bucket.getFrom(),bucket.getTo(),bucket.getDocCount()));
171 
172     });
173 
174         SearchHits hits = searchResponse1.getHits();
175         for (SearchHit hit : hits) {
176             System.out.println(hit.getSourceAsMap());
177         }
178 
179         System.out.println("---------------------");
180 
181 //
182 //        SearchRequestBuilder searchRequestBuilder1 = client.getConnection().prepareSearch("red88")
183 //                .setTypes("test");
184 ////        QueryBuilder tel = QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("tel","18612855433")).should(QueryBuilders.matchQuery("message","程序设计"));
185 ////        BoolQueryBuilder filter1 = QueryBuilders.boolQuery()//.must(QueryBuilders.matchQuery("age", "40").operator(Operator.AND))
186 ////                .must(QueryBuilders.rangeQuery("age").from(0).to(40))
187 ////                .must(tel);
188 //        searchRequestBuilder.setQuery(QueryBuilders.matchQuery("name","三胖子").operator(Operator.AND));
189 //        BoolQueryBuilder boolQueryBuilder1 = QueryBuilders.boolQuery();
190 //        BoolQueryBuilder queryBuilder1 = QueryBuilders.boolQuery();
191 //        getFilterQuery("tel",new String[]{"18612855433"},"OR",queryBuilder1);
192 //        getFilterQuery("message",new String[]{"程序设计"},"OR",queryBuilder1);
193 //        boolQueryBuilder.must(queryBuilder);
194 //        //boolQueryBuilder.must();
195 //        boolQueryBuilder.must(getRangeFilterQuery("age",new Integer[]{null,40}));
196 //        searchRequestBuilder.setPostFilter(boolQueryBuilder1);
197 //        searchRequestBuilder.setFrom(0);
198 //        searchRequestBuilder.setSize(20);
199 //        searchRequestBuilder.setExplain(true);
200 //        TermsAggregationBuilder aggregationBuilder1 = AggregationBuilders.terms("agg").field("attr_name");
201 //
202 //        aggregationBuilder.size(100);
203 //        searchRequestBuilder.addAggregation(aggregationBuilder);
204 //        searchRequestBuilder.addSort("age",SortOrder.DESC);
205 //
206 
207 
208 
209 
210     }
211 
212     public FunctionScoreQueryBuilder sortByFucntion(QueryBuilder queryBuilder) {
213         FunctionScoreQueryBuilder query = functionScoreQuery(queryBuilder,
214                 ScoreFunctionBuilders.fieldValueFactorFunction("age").modifier(FieldValueFactorFunction.Modifier.LN1P).factor(1f)).boostMode(CombineFunction.SUM);
215         //.add(ScoreFunctionBuilders.fieldValueFactorFunction(查询字段).modifier(Modifier.RECIPROCAL).factor(1)).boostMode(“sum”);
216         return query;
217     }
218     private QueryBuilder getFilterQuery(String fieldName, Object[] fieldValues,String andor,BoolQueryBuilder queryBuilder) {
219         //BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
220 
221         for (int i = 0; i < fieldValues.length; i++) {
222             if ("OR".equals(andor)){
223                 queryBuilder.should(QueryBuilders.matchQuery(fieldName,fieldValues[i]).operator(Operator.OR));
224             }else if ("AND".equals(andor)){
225                 queryBuilder.must(QueryBuilders.matchQuery(fieldName,fieldValues[i]).operator(Operator.AND));
226             }
227         }
228 
229         return  queryBuilder;
230 
231     }
232     private QueryBuilder getFilterQuery(String fieldName, Object[] fieldValues,String andor) {
233         BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
234 
235         for (int i = 0; i < fieldValues.length; i++) {
236             if ("OR".equals(andor)){
237                 boolQueryBuilder.should(QueryBuilders.matchQuery(fieldName,fieldValues[i]));
238             }else if ("AND".equals(andor)){
239              boolQueryBuilder.must(QueryBuilders.matchQuery(fieldName,fieldValues[i]));
240             }
241         }
242 
243         return  boolQueryBuilder;
244 
245     }
246 
247     private RangeQueryBuilder getRangeFilterQuery(String fieldName, Integer[] values) {
248         RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(fieldName);
249         rangeQueryBuilder.from(values[0]==null?0:values[0]);
250         rangeQueryBuilder.to((values.length<2||values[1]==null)?99999999:values[1]);
251         return rangeQueryBuilder;
252     }
253 
254 
255     public void multiSearch() {
256 
257         SearchRequestBuilder srb1 = client.getConnection().prepareSearch().setQuery(QueryBuilders.matchQuery("name", "tom")).setSize(1);
258         SearchRequestBuilder srb2 = client.getConnection().prepareSearch().setQuery(QueryBuilders.matchQuery("name", "三胖子")).setSize(1);
259         MultiSearchResponse multiSearchResponse = client.getConnection().prepareMultiSearch()
260                 .add(srb1)
261                 .add(srb2)
262                 .get();
263 
264         for (MultiSearchResponse.Item item : multiSearchResponse.getResponses()) {
265             for (SearchHit hit : item.getResponse().getHits().getHits()) {
266                 System.out.println(hit.getSourceAsMap());
267 
268             }
269         }
270 
271     }
272 
273     public void aggsearch() {
274         SearchRequestBuilder requestBuilder = client.getConnection().prepareSearch("twitter").setTypes("tweet")
275                 .setFrom(0).setSize(100);
276         AggregationBuilder aggregationBuilder = AggregationBuilders.terms("agg").field("name").subAggregation(AggregationBuilders.terms("add").field("age"));
277         SearchResponse response = requestBuilder.setQuery(QueryBuilders.matchQuery("name", "三胖"))
278                 .addAggregation(aggregationBuilder)
279                 .addSort("age", SortOrder.DESC)
280                 .setExplain(true).execute().actionGet();
281         SearchHits searchHits = response.getHits();
282 
283         Terms agg = response.getAggregations().get("agg");
284         Children children = response.getAggregations().get("agg");
285         System.out.println(agg.getBuckets());
286         for (Terms.Bucket bucket : agg.getBuckets()) {
287             System.out.println(bucket.getKey() + ":" + bucket.getDocCount());
288         }
289         System.out.println(children.getAggregations().getAsMap());
290 
291     }
292 
293     public void metricsAgg() {
294 
295         SearchRequestBuilder searchRequestBuilder = client.getConnection().prepareSearch("hello").setTypes("test").setFrom(0).setSize(100);
296         MinAggregationBuilder minAggregationBuilder = AggregationBuilders.min("agg").field("age");
297         SearchResponse response = searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery())
298                 .addAggregation(minAggregationBuilder).setExplain(true).execute().actionGet();
299         Min min = response.getAggregations().get("agg");
300         System.out.println("min:"+min.getValue());
301         MaxAggregationBuilder maxAggregationBuilder = AggregationBuilders.max("max_age").field("age");
302         SearchResponse response1 = searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery())
303                 .addAggregation(maxAggregationBuilder).setExplain(true).execute().actionGet();
304         Max max_age = response1.getAggregations().get("max_age");
305         System.out.println("max:"+max_age.getValue());
306 
307         AvgAggregationBuilder avgAggregationBuilder = AggregationBuilders.avg("avg_age").field("age");
308         SearchResponse response2 = searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery())
309                 .addAggregation(avgAggregationBuilder).setExplain(true).execute().actionGet();
310         Avg avg_age = response2.getAggregations().get("avg_age");
311         System.out.println("avg_age:"+avg_age.getValue());
312 
313         SumAggregationBuilder sumAggregationBuilder = AggregationBuilders.sum("sum_age").field("age");
314         SearchResponse searchResponse = searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery()).addAggregation(sumAggregationBuilder)
315                 .setExplain(true).execute().actionGet();
316         Sum sum_age = searchResponse.getAggregations().get("sum_age");
317         System.out.println("sum_age:"+sum_age.getValue());
318 
319         System.out.println("---------------------------");
320 
321         StatsAggregationBuilder statsAggregationBuilder = AggregationBuilders.stats("agg_status").field("age");
322         SearchResponse searchResponse1 = searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery()).addAggregation(statsAggregationBuilder)
323                 .setExplain(true).execute().actionGet();
324 
325         Stats agg_status = searchResponse1.getAggregations().get("agg_status");
326         double min1 = agg_status.getMin();
327         double max = agg_status.getMax();
328         long count = agg_status.getCount();
329         double sum = agg_status.getSum();
330         double avg = agg_status.getAvg();
331         System.out.println("---------------------------------");
332         System.out.println("min1="+min1);
333         System.out.println("max="+max);
334         System.out.println("count="+count);
335         System.out.println("sum="+sum);
336         System.out.println("avg="+avg);
337 
338         ExtendedStatsAggregationBuilder extendedStatsAggregationBuilder = AggregationBuilders.extendedStats("extend_status").field("age");
339 
340         SearchResponse searchResponse2 = searchRequestBuilder.setQuery(QueryBuilders.matchAllQuery()).addAggregation(extendedStatsAggregationBuilder).setExplain(true).execute().actionGet();
341         ExtendedStats extend_status = searchResponse2.getAggregations().get("extend_status");
342         double extend_min = extend_status.getMin();
343         double extend_max = extend_status.getMax();
344         long extend_count = extend_status.getCount();
345         double extend_sum = extend_status.getSum();
346         double extend_avg = extend_status.getAvg();
347         System.out.println("---------------------------------");
348         System.out.println("extend_min="+extend_min);
349         System.out.println("extend_max="+extend_max);
350         System.out.println("extend_count="+extend_count);
351         System.out.println("extend_sum="+extend_sum);
352         System.out.println("extend_avg="+extend_avg);
353 
354 
355     }
356 }

 

3.1 controller层实现

IndexController
 1 package com.elastic.controller;
 2 
 3 import com.elastic.service.inter.IndexService; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import java.io.IOException; 11 12 /** 13 * Created by xiaotian on 2017/12/1. 14 */ 15 @Controller 16 public class IndexController { 17 18  @Autowired 19 private IndexService indexService; 20 21 @RequestMapping("/index") 22 public void index(HttpServletRequest request, HttpServletResponse response) throws IOException { 23 24 indexService.index(request.getParameter("id")); 25  } 26 @RequestMapping("/get") 27 public void get(){ 28 29  indexService.get(); 30  } 31 32 @RequestMapping("/del") 33 public void get(HttpServletRequest request, HttpServletResponse response) throws IOException { 34 35 indexService.del(request.getParameter("id")); 36  } 37 @RequestMapping("/update") 38 public void update(HttpServletRequest request, HttpServletResponse response) throws Exception { 39 40 indexService.update(request.getParameter("id")); 41  } 42 @RequestMapping("/multiGet") 43 public void multiGet(HttpServletRequest request, HttpServletResponse response) throws Exception { 44 45 indexService.multiGet(request.getParameter("id").split(",")); 46  } 47 @RequestMapping("/bulk") 48 public void bulk(HttpServletRequest request, HttpServletResponse response) throws Exception { 49 50 indexService.bulk(request.getParameter("id").split(",")); 51  } 52 @RequestMapping("/bulkP") 53 public void bulkProcesstor(HttpServletRequest request, HttpServletResponse response) throws Exception { 54 String index = request.getParameter("index"); 55 String type = request.getParameter("type"); 56 String[] ids = request.getParameter("id").split(","); 57  indexService.bulkProcesstor(index,type,ids); 58  } 59 }
SearchController
 1 package com.elastic.controller;
 2 
 3 import com.elastic.service.inter.SearchService; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.stereotype.Controller; 6 import org.springframework.web.bind.annotation.RequestMapping; 7 8 import javax.servlet.http.HttpServletRequest; 9 import javax.servlet.http.HttpServletResponse; 10 import java.io.IOException; 11 12 /** 13 * Created by xiaotian on 2017/12/2. 14 */ 15 @Controller 16 public class SearchController { 17 18  @Autowired 19 private SearchService searchService; 20 @RequestMapping("/search") 21 public void index(HttpServletRequest request, HttpServletResponse response) throws IOException { 22 23  searchService.search(); 24  } 25 @RequestMapping("/multiSearch") 26 public void multiSearch(HttpServletRequest request, HttpServletResponse response) throws IOException { 27 28  searchService.multiSearch(); 29  } 30 @RequestMapping("/aggsearch") 31 public void aggsearch(HttpServletRequest request, HttpServletResponse response) throws IOException { 32 33  searchService.aggsearch(); 34  } 35 36 @RequestMapping("/metricsAgg") 37 public void metricsAgg(HttpServletRequest request, HttpServletResponse response) throws IOException { 38 39  searchService.metricsAgg(); 40  } 41 @RequestMapping("/searchFilter") 42 public void searchByCondition(HttpServletRequest request, HttpServletResponse response) throws Exception { 43 44  searchService.searchByCondition(); 45  } 46 }

4. 通过kibana进行索引建立和查询等

  1 GET red89/test/_search
  2 
  3 { 4  "from" : 0, 5  "size" : 20, 6  "query" : { 7  "match" : { 8  "name" : { 9  "query" : "中华", 10  "operator" : "AND", 11  "prefix_length" : 0, 12  "max_expansions" : 50, 13  "fuzzy_transpositions" : true, 14  "lenient" : false, 15  "zero_terms_query" : "NONE", 16  "boost" : 1.0 17  } 18  } 19  }, 20  "post_filter" : { 21  "bool" : { 22  "must" : [ 23  { 24  "bool" : { 25  "should" : [ 26  { 27  "match" : { 28  "tel" : { 29  "query" : "18612855433", 30  "operator" : "OR", 31  "prefix_length" : 0, 32  "max_expansions" : 50, 33  "fuzzy_transpositions" : true, 34  "lenient" : false, 35  "zero_terms_query" : "NONE", 36  "boost" : 1.0 37  } 38  } 39  } 40  ], 41  "adjust_pure_negative" : true, 42  "boost" : 1.0 43  } 44  }, 45  { 46  "range" : { 47  "age" : { 48  "from" : 0, 49  "to" : 45, 50  "include_lower" : true, 51  "include_upper" : true, 52  "boost" : 1.0 53  } 54  } 55  } 56  ], 57  "adjust_pure_negative" : true, 58  "boost" : 1.0 59  } 60  }, 61  "explain" : true, 62  "aggregations" : { 63  "agg" : { 64  "filter" : { 65  "bool" : { 66  "must" : [ 67  { 68  "bool" : { 69  "should" : [ 70  { 71  "match" : { 72  "tel" : { 73  "query" : "18612855433", 74  "operator" : "OR", 75  "prefix_length" : 0, 76  "max_expansions" : 50, 77  "fuzzy_transpositions" : true, 78  "lenient" : false, 79  "zero_terms_query" : "NONE", 80  "boost" : 1.0 81  } 82  } 83  } 84  ], 85  "adjust_pure_negative" : true, 86  "boost" : 1.0 87  } 88  }, 89  { 90  "range" : { 91  "age" : { 92  "from" : 0, 93  "to" : 45, 94  "include_lower" : true, 95  "include_upper" : true, 96  "boost" : 1.0 97  } 98  } 99  } 100  ], 101  "adjust_pure_negative" : true, 102  "boost" : 1.0 103  } 104  }, 105  "aggregations" : { 106  "agg" : { 107  "terms" : { 108  "field" : "attr_name", 109  "size" : 100, 110  "min_doc_count" : 1, 111  "shard_min_doc_count" : 0, 112  "show_term_doc_count_error" : false, 113  "order" : [ 114  { 115  "_count" : "desc" 116  }, 117  { 118  "_key" : "asc" 119  } 120  ] 121  } 122  } 123  } 124  }, 125  "range" : { 126  "range" : { 127  "field" : "age", 128  "ranges" : [ 129  { 130  "from" : 0.0, 131  "to" : 30.0 132  }, 133  { 134  "from" : 30.0, 135  "to" : 50.0 136  }, 137  { 138  "from" : 50.0, 139  "to" : 100.0 140  } 141  ], 142  "keyed" : false 143  } 144  } 145  } 146 }

查询结果:

  1 {
  2  "took": 1, 3  "timed_out": false, 4  "_shards": { 5  "total": 5, 6  "successful": 5, 7  "skipped": 0, 8  "failed": 0 9  }, 10  "hits": { 11  "total": 21, 12  "max_score": 1, 13  "hits": [ 14  { 15  "_index": "red89", 16  "_type": "test", 17  "_id": "14", 18  "_score": 1, 19  "_source": { 20  "date": "2017-12-11T09:55:42.261Z", 21  "attr_name": [ 22  "品牌_sku_attr14", 23  "商品类别_sku_attr14", 24  "面料_sku_attr14" 25  ], 26  "name": "中华人民共和国14", 27  "tel": "18612855433", 28  "message": "程序设计14", 29  "create_date": "2017-12-11T09:55:42.261Z", 30  "age": 44 31  } 32  }, 33  { 34  "_index": "red89", 35  "_type": "test", 36  "_id": "19", 37  "_score": 1, 38  "_source": { 39  "date": "2017-12-11T09:55:42.261Z", 40  "attr_name": [ 41  "品牌_sku_attr19", 42  "商品类别_sku_attr19", 43  "面料_sku_attr19" 44  ], 45  "name": "中华人民共和国19", 46  "tel": "18612855433", 47  "message": "程序设计19", 48  "create_date": "2017-12-11T09:55:42.261Z", 49  "age": 49 50  } 51  }, 52  { 53  "_index": "red89", 54  "_type": "test", 55  "_id": "5", 56  "_score": 1, 57  "_source": { 58  "date": "2017-12-11T09:55:42.257Z", 59  "attr_name": [ 60  "品牌_sku_attr5", 61  "商品类别_sku_attr5", 62  "面料_sku_attr5" 63  ], 64  "name": "中华人民共和国5", 65  "tel": "18612855433", 66  "message": "程序设计5", 67  "create_date": "2017-12-11T09:55:42.257Z", 68  "age": 35 69  } 70  }, 71  { 72  "_index": "red89", 73  "_type": "test", 74  "_id": "8", 75  "_score": 1, 76  "_source": { 77  "date": "2017-12-11T09:55:42.257Z", 78  "attr_name": [ 79  "品牌_sku_attr8", 80  "商品类别_sku_attr8", 81  "面料_sku_attr8" 82  ], 83  "name": "中华人民共和国8", 84  "tel": "18612855433", 85  "message": "程序设计8", 86  "create_date": "2017-12-11T09:55:42.257Z", 87  "age": 38 88  } 89  }, 90  { 91  "_index": "red89", 92  "_type": "test", 93  "_id": "9", 94  "_score": 1, 95  "_source": { 96  "date": "2017-12-11T09:55:42.257Z", 97  "attr_name": [ 98  "品牌_sku_attr9", 99  "商品类别_sku_attr9", 100  "面料_sku_attr9" 101  ], 102  "name": "中华人民共和国9", 103  "tel": "18612855433", 104  "message": "程序设计9", 105  "create_date": "2017-12-11T09:55:42.257Z", 106  "age": 39 107  } 108  }, 109  { 110  "_index": "red89", 111  "_type": "test", 112  "_id": "10", 113  "_score": 1, 114  "_source": { 115  "date": "2017-12-11T09:55:42.257Z", 116  "attr_name": [ 117  "品牌_sku_attr10", 118  "商品类别_sku_attr10", 119  "面料_sku_attr10" 120  ], 121  "name": "中华人民共和国10", 122  "tel": "18612855433", 123  "message": "程序设计10", 124  "create_date": "2017-12-11T09:55:42.257Z", 125  "age": 40 126  } 127  }, 128  { 129  "_index": "red89", 130  "_type": "test", 131  "_id": "12", 132  "_score": 1, 133  "_source": { 134  "date": "2017-12-11T09:55:42.261Z", 135  "attr_name": [ 136  "品牌_sku_attr12", 137  "商品类别_sku_attr12", 138  "面料_sku_attr12" 139  ], 140  "name": "中华人民共和国12", 141  "tel": "18612855433", 142  "message": "程序设计12", 143  "create_date": "2017-12-11T09:55:42.261Z", 144  "age": 42 145  } 146  }, 147  { 148  "_index": "red89", 149  "_type": "test", 150  "_id": "ZraQK2ABrThwqnonhOO3", 151  "_score": 1, 152  "_source": {} 153  }, 154  { 155  "_index": "red89", 156  "_type": "test", 157  "_id": "2", 158  "_score": 1, 159  "_source": { 160  "date": "2017-12-11T09:55:42.256Z", 161  "attr_name": [ 162  "品牌_sku_attr2", 163  "商品类别_sku_attr2", 164  "面料_sku_attr2" 165  ], 166  "name": "中华人民共和国2", 167  "tel": "18612855433", 168  "message": "程序设计2", 169  "create_date": "2017-12-11T09:55:42.256Z", 170  "age": 32 171  } 172  }, 173  { 174  "_index": "red89", 175  "_type": "test", 176  "_id": "4", 177  "_score": 1, 178  "_source": { 179  "date": "2017-12-11T09:55:42.257Z", 180  "attr_name": [ 181  "品牌_sku_attr4", 182  "商品类别_sku_attr4", 183  "面料_sku_attr4" 184  ], 185  "name": "中华人民共和国4", 186  "tel": "18612855433", 187  "message": "程序设计4", 188  "create_date": "2017-12-11T09:55:42.257Z", 189  "age": 34 190  } 191  } 192  ] 193  } 194 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM