Authored by wangnan

返回距离

... ... @@ -34,7 +34,10 @@ import org.elasticsearch.action.get.MultiGetRequest;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.*;
import org.elasticsearch.action.search.MultiSearchRequest;
import org.elasticsearch.action.search.MultiSearchResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.suggest.SuggestResponse;
import org.elasticsearch.action.update.UpdateAction;
import org.elasticsearch.action.update.UpdateRequestBuilder;
... ... @@ -59,6 +62,7 @@ import org.elasticsearch.search.suggest.completion.CompletionSuggestionBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.util.*;
public class ElasticsearchClientImpl implements IElasticsearchClient {
... ... @@ -551,6 +555,9 @@ public class ElasticsearchClientImpl implements IElasticsearchClient {
}
map.put("_highlight", highlightMap);
}
//返回距离
BigDecimal geoDis = new BigDecimal((Double) hit.getSortValues()[0]);
map.put("geoDistance", geoDis.setScale(0, BigDecimal.ROUND_HALF_DOWN));
resultList.add(map);
}
long total = hits.getTotalHits();
... ...
... ... @@ -12,51 +12,49 @@ public class SearchParamUtils {
public static SearchSourceBuilder genSearchSourceBuilderFromSearchParam(SearchParam searchParam) {
final SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
// 搜索条件
if (searchParam.getFilter() != null) {
if(searchParam.isGeoQuery()){
sourceBuilder.query(QueryBuilders.boolQuery().must(searchParam.getQuery()).must(searchParam.getGeoDistanceRangeQueryBuilder()).filter(searchParam.getFilter()));
}else{
//sourceBuilder.query(QueryBuilders.filteredQuery(searchParam.getQuery(), searchParam.getFiter()));
sourceBuilder.query(QueryBuilders.boolQuery().must(searchParam.getQuery()).filter(searchParam.getFilter()));
}
} else {
if(searchParam.isGeoQuery()){
sourceBuilder.query(QueryBuilders.boolQuery().must(searchParam.getQuery()).must(searchParam.getGeoDistanceRangeQueryBuilder()));
}else{
sourceBuilder.query(searchParam.getQuery());
}
}
// 每页记录数
sourceBuilder.size(searchParam.getSize());
// 当前页起始记录
sourceBuilder.from(searchParam.getOffset());
// 显示字段,默认全部显示
if (searchParam.getResultFields().size() > 0) {
sourceBuilder.fields(searchParam.getResultFields());
}
// 高亮
if (searchParam.isHighlight()) {
for (String field : searchParam.getHighlightFields()) {
sourceBuilder.highlighter().field(field).preTags(searchParam.getHighlightPreTag()).postTags(searchParam.getHighlightPostTag());
}
}
// 分组统计
List<AbstractAggregationBuilder> aggregations = searchParam.getAggregationBuilders();
if (aggregations != null && aggregations.size() > 0) {
for (AbstractAggregationBuilder aggregation : aggregations) {
sourceBuilder.aggregation(aggregation);
}
}
// 排序字段
for (String sortField : searchParam.getSortFields().keySet()) {
String sortValue = searchParam.getSortFields().get(sortField);
sourceBuilder.sort(sortField, SortOrder.ASC.toString().equals(sortValue) ? SortOrder.ASC : SortOrder.DESC);
}
return sourceBuilder;
}
final SearchSourceBuilder sourceBuilder = SearchSourceBuilder.searchSource();
// 搜索条件
if (searchParam.getFilter() != null) {
if(searchParam.isGeoQuery()){
sourceBuilder.query(QueryBuilders.boolQuery().must(searchParam.getQuery()).must(searchParam.getGeoDistanceRangeQueryBuilder()).filter(searchParam.getFilter()));
sourceBuilder.sort(searchParam.getGeoDistanceSortBuilder());
}else{
//sourceBuilder.query(QueryBuilders.filteredQuery(searchParam.getQuery(), searchParam.getFiter()));
sourceBuilder.query(QueryBuilders.boolQuery().must(searchParam.getQuery()).filter(searchParam.getFilter()));
// 排序字段
for (String sortField : searchParam.getSortFields().keySet()) {
String sortValue = searchParam.getSortFields().get(sortField);
sourceBuilder.sort(sortField, SortOrder.ASC.toString().equals(sortValue) ? SortOrder.ASC : SortOrder.DESC);
}
}
}
// 每页记录数
sourceBuilder.size(searchParam.getSize());
// 当前页起始记录
sourceBuilder.from(searchParam.getOffset());
// 显示字段,默认全部显示
if (searchParam.getResultFields().size() > 0) {
sourceBuilder.fields(searchParam.getResultFields());
}
// 高亮
if (searchParam.isHighlight()) {
for (String field : searchParam.getHighlightFields()) {
sourceBuilder.highlighter().field(field).preTags(searchParam.getHighlightPreTag()).postTags(searchParam.getHighlightPostTag());
}
}
// 分组统计
List<AbstractAggregationBuilder> aggregations = searchParam.getAggregationBuilders();
if (aggregations != null && aggregations.size() > 0) {
for (AbstractAggregationBuilder aggregation : aggregations) {
sourceBuilder.aggregation(aggregation);
}
}
return sourceBuilder;
}
}
... ...
... ... @@ -48,12 +48,11 @@ public class SearchServiceHelper {
public GeoDistanceSortBuilder constructGeoDistanceSortBuilder(Map<String, String> paramMap) {
GeoDistanceSortBuilder sort = new GeoDistanceSortBuilder("pin.location");
sort.unit(DistanceUnit.METERS);//距离单位米
if (paramMap.get("distance_order").equals("asc")) {
sort.order(SortOrder.ASC);
} else if (paramMap.get("distance_order").equals("desc")) {
sort.order(SortOrder.DESC);
} else {
sort.order(SortOrder.ASC);
sort.order(SortOrder.ASC);
if (StringUtils.isNotBlank(paramMap.get("distance_order"))) {
if (paramMap.get("distance_order").equals("desc")) {
sort.order(SortOrder.DESC);
}
}
sort.point(Double.valueOf(paramMap.get("latitude")), Double.valueOf(paramMap.get("longitude")));//注意纬度在前,经度在后
return sort;
... ... @@ -66,6 +65,7 @@ public class SearchServiceHelper {
* @param paramMap
* @return
*/
public QueryBuilder constructQueryBuilder(Map<String, String> paramMap, String indexName, boolean isSuggest) {
String keyword = paramMap.get("query");
... ...