|
@@ -1,25 +1,6 @@
|
|
|
package com.bowintek.practice.services.impl;
|
|
|
|
|
|
-import co.elastic.clients.elasticsearch.ElasticsearchClient;
|
|
|
-import co.elastic.clients.elasticsearch._types.FieldValue;
|
|
|
-import co.elastic.clients.elasticsearch._types.SortOptions;
|
|
|
-import co.elastic.clients.elasticsearch._types.SortOrder;
|
|
|
-import co.elastic.clients.elasticsearch._types.aggregations.Aggregate;
|
|
|
-import co.elastic.clients.elasticsearch._types.aggregations.Buckets;
|
|
|
-import co.elastic.clients.elasticsearch._types.aggregations.StringTermsAggregate;
|
|
|
-import co.elastic.clients.elasticsearch._types.aggregations.StringTermsBucket;
|
|
|
-import co.elastic.clients.elasticsearch._types.mapping.Property;
|
|
|
-import co.elastic.clients.elasticsearch._types.mapping.TextProperty;
|
|
|
-import co.elastic.clients.elasticsearch._types.query_dsl.*;
|
|
|
-import co.elastic.clients.elasticsearch.cat.IndicesResponse;
|
|
|
-import co.elastic.clients.elasticsearch.core.SearchRequest;
|
|
|
-import co.elastic.clients.elasticsearch.core.SearchResponse;
|
|
|
-import co.elastic.clients.elasticsearch.core.search.Hit;
|
|
|
-import co.elastic.clients.elasticsearch.indices.GetIndexResponse;
|
|
|
-import co.elastic.clients.elasticsearch.indices.IndexState;
|
|
|
-import co.elastic.clients.elasticsearch.indices.PutMappingRequest;
|
|
|
-import co.elastic.clients.elasticsearch.indices.PutMappingResponse;
|
|
|
-import co.elastic.clients.json.JsonData;
|
|
|
+
|
|
|
import com.bowintek.practice.mapper.cquery.EsIndexCquery;
|
|
|
import com.bowintek.practice.services.service.AnalyzeService;
|
|
|
import com.bowintek.practice.services.service.EsQueryService;
|
|
@@ -36,6 +17,20 @@ import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.lucene.search.join.ScoreMode;
|
|
|
+import org.elasticsearch.action.search.SearchRequest;
|
|
|
+import org.elasticsearch.action.search.SearchRequestBuilder;
|
|
|
+import org.elasticsearch.action.search.SearchResponse;
|
|
|
+import org.elasticsearch.client.RequestOptions;
|
|
|
+import org.elasticsearch.client.RestHighLevelClient;
|
|
|
+import org.elasticsearch.index.query.*;
|
|
|
+import org.elasticsearch.search.SearchHit;
|
|
|
+import org.elasticsearch.search.aggregations.AggregationBuilders;
|
|
|
+import org.elasticsearch.search.aggregations.bucket.terms.Terms;
|
|
|
+import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
|
|
|
+import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
|
+import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
|
|
|
+import org.elasticsearch.search.sort.SortOrder;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.core.query.SortQuery;
|
|
|
import org.springframework.stereotype.Component;
|
|
@@ -49,7 +44,9 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
public class EsQueryServiceImpl implements EsQueryService {
|
|
|
@Autowired
|
|
|
- private ElasticsearchClient esClient;
|
|
|
+ RestHighLevelClient highLevelClient;
|
|
|
+ @Autowired
|
|
|
+ private RestHighLevelClient esClient;
|
|
|
@Autowired
|
|
|
private AnalyzeService analyzeService;
|
|
|
@Autowired
|
|
@@ -90,8 +87,8 @@ public class EsQueryServiceImpl implements EsQueryService {
|
|
|
return pathCache;
|
|
|
}
|
|
|
|
|
|
- public List<Query> getComparisonQueryList(EsQueryText queryText) {
|
|
|
- List<Query> queryList = new ArrayList<>();
|
|
|
+ public List<QueryBuilder> getComparisonQueryList(EsQueryText queryText) {
|
|
|
+ List<QueryBuilder> queryList = new ArrayList<>();
|
|
|
//分析查询字符串,有的字符串需要变成条件查询
|
|
|
List<ComparisonResult> cmpList = analyzeService.analyzeJavas(queryText.getKeyString());
|
|
|
//二级查询的路径信息
|
|
@@ -127,23 +124,11 @@ public class EsQueryServiceImpl implements EsQueryService {
|
|
|
}
|
|
|
return queryList;
|
|
|
}
|
|
|
- void getIndex()
|
|
|
- {
|
|
|
- try {
|
|
|
- // 查看指定索引
|
|
|
- GetIndexResponse getIndexResponse = esClient.indices().get(s -> s.index("test4"));
|
|
|
- Map<String, IndexState> result = getIndexResponse.result();
|
|
|
- result.forEach((k, v) -> log.info("key = {},value = {}", k, v));
|
|
|
- }catch (Exception ex){
|
|
|
- log.info(ex.getMessage());
|
|
|
- ex.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public Map<String, Object> query(List<EsQueryText> queryList, List<ComparisonResult> limiters,
|
|
|
int page, int limit, String orderType, String orderBy) {
|
|
|
- getIndex();
|
|
|
|
|
|
//[1]需要返回的结果map
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
@@ -153,12 +138,12 @@ public class EsQueryServiceImpl implements EsQueryService {
|
|
|
//二级查询的路径信息
|
|
|
List<String> pathList = getPathCache();
|
|
|
|
|
|
- List<Query> queryMustList = new ArrayList<>();
|
|
|
- BoolQuery.Builder boolQuery = new BoolQuery.Builder();
|
|
|
+ List<QueryBuilder> queryMustList = new ArrayList<>();
|
|
|
+ BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
|
|
|
|
|
|
//[2]分析查询字符串,有的字符串需要变成条件查询
|
|
|
for (EsQueryText queryText : queryList) {
|
|
|
- List<Query> shouldQuerys = getComparisonQueryList(queryText);
|
|
|
+ List<QueryBuilder> shouldQuerys = getComparisonQueryList(queryText);
|
|
|
if (shouldQuerys.size() > 0) {
|
|
|
queryMustList.addAll(shouldQuerys);
|
|
|
}
|
|
@@ -170,162 +155,183 @@ public class EsQueryServiceImpl implements EsQueryService {
|
|
|
|
|
|
//第一级,对比搜索
|
|
|
if (Constant.AND.equals(cmp.getRelation())) {
|
|
|
- boolQuery.must(getRangeQueryByComparison(cmp));
|
|
|
+ getRangeQueryByComparison(cmp).forEach(x -> boolQuery.must(x));
|
|
|
} else if (Constant.OR.equals(cmp.getRelation())) {
|
|
|
- boolQuery.should(getRangeQueryByComparison(cmp));
|
|
|
+ getRangeQueryByComparison(cmp).forEach(x -> boolQuery.should(x));
|
|
|
} else if (Constant.NOT.equals(cmp.getRelation())) {
|
|
|
- boolQuery.mustNot(getRangeQueryByComparison(cmp));
|
|
|
+ getRangeQueryByComparison(cmp).forEach(x -> boolQuery.mustNot(x));
|
|
|
} else {
|
|
|
- boolQuery.must(getRangeQueryByComparison(cmp));
|
|
|
+ getRangeQueryByComparison(cmp).forEach(x -> boolQuery.must(x));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//[4]建立查询参数分析
|
|
|
- SearchRequest.Builder searchRequest = new SearchRequest.Builder();
|
|
|
//==>要查询的索引列表,从数据库配置表中获取
|
|
|
- searchRequest.index(getIndexCache());
|
|
|
+ SearchRequest searchRequest=new SearchRequest(getIndexCache().toArray(new String[0])); //新建请求
|
|
|
+ SearchSourceBuilder searchBuilder=new SearchSourceBuilder();
|
|
|
+
|
|
|
+
|
|
|
//==>数据分页显示
|
|
|
- searchRequest.size(limit);
|
|
|
- searchRequest.from(page * limit);
|
|
|
+ searchBuilder.size(limit);
|
|
|
+ searchBuilder.from(page * limit);
|
|
|
//==>设置查询条件
|
|
|
|
|
|
if (queryMustList.size() > 0) {
|
|
|
- boolQuery.should(queryMustList);
|
|
|
+ queryMustList.forEach(x->boolQuery.should(x));
|
|
|
}
|
|
|
- Query queryMust = Query.of(q -> q.bool(boolQuery.build()));
|
|
|
|
|
|
//排序
|
|
|
if (orderType != null && !StringUtils.IsNullEmpty(orderBy)) {
|
|
|
- SortOptions.Builder sb = new SortOptions.Builder();
|
|
|
- sb.field(f -> f.field(orderBy).order(orderType.equals("asc") ? SortOrder.Asc : SortOrder.Desc));
|
|
|
- searchRequest.query(queryMust).sort(sb.build());
|
|
|
- }else{
|
|
|
- searchRequest.query(queryMust);
|
|
|
+ searchBuilder.query(boolQuery).sort(orderBy,orderType.equals("asc") ? SortOrder.ASC : SortOrder.DESC);
|
|
|
+ } else {
|
|
|
+ searchBuilder.query(boolQuery);
|
|
|
}
|
|
|
//==>高亮设置
|
|
|
- searchRequest.highlight(h -> h.fields("*", f -> f.preTags("<font color='red'>")
|
|
|
- .postTags("</font>")));
|
|
|
+ HighlightBuilder highlightBuilder = new HighlightBuilder()
|
|
|
+ .preTags("<font color='red'>")
|
|
|
+ .postTags("</font>")
|
|
|
+ .field("*");
|
|
|
+ searchBuilder.highlighter(highlightBuilder);
|
|
|
|
|
|
//查询后分组
|
|
|
- searchRequest.aggregations("group_well", a -> a.terms(t -> t.field("well_id")));
|
|
|
+ TermsAggregationBuilder aggregation = AggregationBuilders
|
|
|
+ .terms("group_well")
|
|
|
+ .field("well_id");
|
|
|
+ searchBuilder.aggregation(aggregation);
|
|
|
|
|
|
//[5]Es发起查询
|
|
|
- SearchRequest request = searchRequest.build();
|
|
|
+ //SearchRequest request = searchRequest.build();
|
|
|
+ SearchRequest request =searchRequest.source(searchBuilder);
|
|
|
+
|
|
|
+ log.info("dsl:" + searchRequest.source().toString());
|
|
|
+ SearchResponse response = esClient.search(searchRequest, RequestOptions.DEFAULT);
|
|
|
|
|
|
- log.info("dsl:" + request.toString());
|
|
|
- SearchResponse<ObjectNode> response = esClient.search(request, ObjectNode.class);
|
|
|
log.info("response:" + response.toString());
|
|
|
|
|
|
//[6]转换结果,可以对不同的index做出参数输出
|
|
|
List<Map<String, Object>> rows = searchResponse2List(response);
|
|
|
result.put("rows", rows);
|
|
|
- result.put("total", response.hits().total().value());
|
|
|
+ result.put("total", response.getHits().getTotalHits().value);
|
|
|
result.put("agg", aggResponse2List(response));
|
|
|
|
|
|
- //请求参数输出,方便调试
|
|
|
- String[] jsonStrings = request.toString().split("typed_keys=true");
|
|
|
- result.put("SearchUrl", jsonStrings[0]);
|
|
|
- result.put("SearchRequest", stringToNodeJson(jsonStrings[1]));
|
|
|
- System.out.println(response.hits().total() + " " + request.toString());
|
|
|
} catch (Exception ex) {
|
|
|
log.info(ex.getMessage());
|
|
|
result.put("Message", ex.getMessage());
|
|
|
result.put("StackTrace", ex.getStackTrace());
|
|
|
+ }finally {
|
|
|
+ /*try {
|
|
|
+ //esClient.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }*/
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- public Query getMultiMatchQuery(String text) {
|
|
|
+ public QueryBuilder getMultiMatchQuery(String text) {
|
|
|
//不指定,查询所有的一级字段
|
|
|
- return MultiMatchQuery.of(q -> q.query(text)
|
|
|
- .operator(Operator.Or))._toQuery();
|
|
|
+ return QueryBuilders.multiMatchQuery(text)
|
|
|
+ .operator(org.elasticsearch.index.query.Operator.OR);
|
|
|
}
|
|
|
|
|
|
- public Query getMultiMatchQuery(List<String> fields, String text) {
|
|
|
+ public QueryBuilder getMultiMatchQuery(List<String> fields, String text) {
|
|
|
//限定查询字段
|
|
|
- return MultiMatchQuery.of(q -> q.fields(fields)
|
|
|
- .query(text)
|
|
|
- .operator(Operator.Or))._toQuery();
|
|
|
+ return QueryBuilders.multiMatchQuery(text, fields.toArray(new String[0]))
|
|
|
+ .operator(org.elasticsearch.index.query.Operator.OR);
|
|
|
}
|
|
|
|
|
|
- public Query getMultiMatchQuery(String[] fields, String text) {
|
|
|
+ public QueryBuilder getMultiMatchQuery(String[] fields, String text) {
|
|
|
//限定查询字段
|
|
|
return getMultiMatchQuery(Arrays.asList(fields), text);
|
|
|
}
|
|
|
|
|
|
- public Query getNestedMultiMatchQuery(String path, String text) {
|
|
|
+ public QueryBuilder getNestedMultiMatchQuery(String path, String text) {
|
|
|
//不指定,查询所有的二级字段
|
|
|
- return NestedQuery.of(q -> q.path(path)
|
|
|
- .query(getMultiMatchQuery(text)).innerHits(i -> i.highlight(hl -> hl
|
|
|
- .fields("*", ff -> ff
|
|
|
- .preTags("<font color='red'>")
|
|
|
- .postTags("</font>")
|
|
|
- )
|
|
|
- ))
|
|
|
- .ignoreUnmapped(true))._toQuery();
|
|
|
+ // 创建 nested 查询
|
|
|
+ NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
|
|
|
+ path,
|
|
|
+ getMultiMatchQuery(text),
|
|
|
+ ScoreMode.None);
|
|
|
+
|
|
|
+ // 设置 inner_hits
|
|
|
+ InnerHitBuilder innerHitBuilder = new InnerHitBuilder();
|
|
|
+
|
|
|
+ // 设置 highlight
|
|
|
+ HighlightBuilder highlightBuilder = new HighlightBuilder()
|
|
|
+ .preTags("<font color='red'>")
|
|
|
+ .postTags("</font>").field("*"); // 高亮所有字段
|
|
|
+
|
|
|
+ innerHitBuilder.setHighlightBuilder(highlightBuilder);
|
|
|
+
|
|
|
+ nestedQuery.innerHit(innerHitBuilder);
|
|
|
+
|
|
|
+ return nestedQuery;
|
|
|
}
|
|
|
|
|
|
- public Query getNestedMultiMatchQuery(String path, List<String> fields, String text) {
|
|
|
+ public QueryBuilder getNestedMultiMatchQuery(String path, List<String> fields, String text) {
|
|
|
//限定查询字段
|
|
|
- return NestedQuery.of(q -> q.path(path)
|
|
|
- .query(getMultiMatchQuery(fields, text))
|
|
|
- .ignoreUnmapped(true))._toQuery();
|
|
|
+ return QueryBuilders.nestedQuery(
|
|
|
+ path,
|
|
|
+ getMultiMatchQuery(fields, text),
|
|
|
+ ScoreMode.None);
|
|
|
}
|
|
|
|
|
|
- public Query getNestedMultiMatchQuery(String path, String[] fields, String text) {
|
|
|
+ public QueryBuilder getNestedMultiMatchQuery(String path, String[] fields, String text) {
|
|
|
//限定查询字段
|
|
|
- return NestedQuery.of(q -> q.path(path)
|
|
|
- .query(getMultiMatchQuery(fields, text))
|
|
|
- .ignoreUnmapped(true))._toQuery();
|
|
|
+ return QueryBuilders.nestedQuery(
|
|
|
+ path,
|
|
|
+ getMultiMatchQuery(fields, text),
|
|
|
+ ScoreMode.None);
|
|
|
}
|
|
|
|
|
|
- public List<Query> getRangeQueryByComparison(ComparisonResult cmp) {
|
|
|
- List<Query> queryList = new ArrayList<>();
|
|
|
+ public List<QueryBuilder> getRangeQueryByComparison(ComparisonResult cmp) {
|
|
|
+ List<QueryBuilder> queryList = new ArrayList<>();
|
|
|
String fieldString = cmp.getFields();
|
|
|
//对比类型查询
|
|
|
- Query query = getComparisonQuery(fieldString, cmp.getOpreation(), cmp.getValue());
|
|
|
+ QueryBuilder query = getComparisonQuery(fieldString, cmp.getOpreation(), cmp.getValue());
|
|
|
if (query != null) queryList.add(query);
|
|
|
|
|
|
return queryList;
|
|
|
}
|
|
|
|
|
|
- public List<Query> getNestedRangeQueryByComparison(ComparisonResult cmp, String path) {
|
|
|
- List<Query> queryList = new ArrayList<>();
|
|
|
+ public List<QueryBuilder> getNestedRangeQueryByComparison(ComparisonResult cmp, String path) {
|
|
|
+ List<QueryBuilder> queryList = new ArrayList<>();
|
|
|
String fieldString = cmp.getFields();
|
|
|
//对比类型查询
|
|
|
- Query query = getComparisonQuery(path + "." + fieldString, cmp.getOpreation(), cmp.getValue());
|
|
|
+ QueryBuilder query = getComparisonQuery(path + "." + fieldString, cmp.getOpreation(), cmp.getValue());
|
|
|
if (query != null) {
|
|
|
- Query nested = NestedQuery.of(q -> q.path(path).query(query)
|
|
|
- .ignoreUnmapped(true))._toQuery();
|
|
|
+ QueryBuilder nested = QueryBuilders.nestedQuery(
|
|
|
+ path,
|
|
|
+ query,
|
|
|
+ ScoreMode.None);
|
|
|
queryList.add(nested);
|
|
|
}
|
|
|
|
|
|
return queryList;
|
|
|
}
|
|
|
|
|
|
- public Query getComparisonQuery(String fieldString, String opreation, String value) {
|
|
|
+ public QueryBuilder getComparisonQuery(String fieldString, String opreation, String value) {
|
|
|
//对比类型查询
|
|
|
- Query query = null;
|
|
|
+ QueryBuilder query = null;
|
|
|
if (opreation.equals("大于"))
|
|
|
- query = RangeQuery.of(q -> q.field(fieldString).gt(JsonData.of(value)))._toQuery();
|
|
|
+ query = QueryBuilders.rangeQuery(fieldString).gt(value);
|
|
|
else if (opreation.equals("大于等于"))
|
|
|
- query = RangeQuery.of(q -> q.field(fieldString).gte(JsonData.of(value)))._toQuery();
|
|
|
+ query = QueryBuilders.rangeQuery(fieldString).gte(value);
|
|
|
else if (opreation.equals("小于"))
|
|
|
- query = RangeQuery.of(q -> q.field(fieldString).lt(JsonData.of(value)))._toQuery();
|
|
|
+ query = QueryBuilders.rangeQuery(fieldString).lt(value);
|
|
|
else if (opreation.equals("小于等于"))
|
|
|
- query = RangeQuery.of(q -> q.field(fieldString).lte(JsonData.of(value)))._toQuery();
|
|
|
+ query = QueryBuilders.rangeQuery(fieldString).lte(value);
|
|
|
else if (opreation.equals("等于"))
|
|
|
- query = MatchQuery.of(q -> q.field(fieldString).query(value).minimumShouldMatch("80%"))._toQuery();
|
|
|
+ query = QueryBuilders.matchQuery(fieldString, value)
|
|
|
+ .minimumShouldMatch("80%");
|
|
|
else if (opreation.equals("包括IN")) {
|
|
|
- String[] ins = value.split(",");
|
|
|
- List<FieldValue> fls = new ArrayList<>();
|
|
|
- for (String inString : ins) fls.add(FieldValue.of(inString));
|
|
|
- query = TermsQuery.of(q -> q.field(fieldString).terms(s -> s.value(fls)))._toQuery();
|
|
|
+ String[] fls = value.split(",");
|
|
|
+ query=QueryBuilders.termsQuery(fieldString, fls);
|
|
|
}
|
|
|
return query;
|
|
|
}
|
|
|
|
|
|
- public Map<String, Object> queryTest(String text, int page, int limit) {
|
|
|
+ /* public Map<String, Object> queryTest(String text, int page, int limit) {
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
result.put("total", 0);
|
|
|
|
|
@@ -388,7 +394,7 @@ public class EsQueryServiceImpl implements EsQueryService {
|
|
|
PutMappingResponse putMappingResponse = esClient.indices().putMapping(putMappingRequest);
|
|
|
boolean acknowledged = putMappingResponse.acknowledged();
|
|
|
System.out.println("update mappings ack: " + acknowledged);
|
|
|
- }
|
|
|
+ }*/
|
|
|
|
|
|
public JsonNode stringToNodeJson(String jsonString) throws JsonProcessingException {
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
@@ -396,37 +402,39 @@ public class EsQueryServiceImpl implements EsQueryService {
|
|
|
return rootNode;
|
|
|
}
|
|
|
|
|
|
- public List<Map<String, Object>> aggResponse2List(SearchResponse<ObjectNode> searchResponse) {
|
|
|
- List<StringTermsBucket> buckets = searchResponse.aggregations().get("group_well").sterms().buckets().array();
|
|
|
+ public List<Map<String, Object>> aggResponse2List(SearchResponse searchResponse) {
|
|
|
+ // 获取聚合结果
|
|
|
+ Terms groupWell = searchResponse.getAggregations().get("group_well");
|
|
|
List<Map<String, Object>> aggs = new ArrayList<>();
|
|
|
- for (StringTermsBucket bucket : buckets) {
|
|
|
+ // 处理聚合结果
|
|
|
+ for (Terms.Bucket bucket : groupWell.getBuckets()) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
- map.put("key", bucket.key().stringValue());
|
|
|
- map.put("doc_count", bucket.docCount());
|
|
|
+ map.put("key", bucket.getKeyAsString());
|
|
|
+ map.put("doc_count", bucket.getDocCount());
|
|
|
aggs.add(map);
|
|
|
}
|
|
|
return aggs;
|
|
|
}
|
|
|
|
|
|
- public List<Map<String, Object>> searchResponse2List(SearchResponse<ObjectNode> searchResponse) {
|
|
|
+ public List<Map<String, Object>> searchResponse2List(SearchResponse searchResponse) {
|
|
|
|
|
|
if (searchResponse == null) {
|
|
|
return new ArrayList<>(0);
|
|
|
}
|
|
|
- if (searchResponse.hits() == null) {
|
|
|
+ if (searchResponse.getHits() == null) {
|
|
|
return new ArrayList<>(0);
|
|
|
}
|
|
|
//if (CommonUtils.isCollectionEmpty(searchResponse.hits().hits())) {return new ArrayList<>(0);}
|
|
|
|
|
|
- List<Hit<ObjectNode>> hits = searchResponse.hits().hits();
|
|
|
+ SearchHit[] hits = searchResponse.getHits().getHits();
|
|
|
|
|
|
- List<Map<String, Object>> list = new ArrayList<>(hits.size());
|
|
|
- for (Hit<ObjectNode> hit : hits) {
|
|
|
- ObjectNode node = hit.source();
|
|
|
- Map<String, Object> map = objectNode2Map(hit.index(), node);
|
|
|
- map.put("index", hit.index());
|
|
|
- map.put("highlight", hit.highlight());
|
|
|
- map.put("innerHits", hit.innerHits());
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>(hits.length);
|
|
|
+ for (SearchHit hit : hits) {
|
|
|
+ Map<String, Object> map = hit.getSourceAsMap();
|
|
|
+ //Map<String, Object> map = objectNode2Map(hit.getIndex(), node);
|
|
|
+ map.put("index", hit.getIndex());
|
|
|
+ map.put("highlight", hit.getHighlightFields());
|
|
|
+ map.put("innerHits", hit.getInnerHits());
|
|
|
list.add(map);
|
|
|
|
|
|
//输出结果日志
|