import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.geo.GeoDistance;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.unit.DistanceUnit;
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.GeoDistanceQueryBuilder;
import org.elasticsearch.index.query.GeoValidationMethod;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.GeoDistanceSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
-
es測試
*/
public class EsDemo
{
private static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
// 默認緩存限制為100MB,此處修改為30MB。
builder.setHttpAsyncResponseConsumerFactory(
new HttpAsyncResponseConsumerFactory
.HeapBufferedResponseConsumerFactory(30 * 1024 * 1024));
COMMON_OPTIONS = builder.build();
}
protected RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost(“127.0.0.1”, 9200, “http”)));;
private String indexName = “hbp”;
private String type = “_doc”;
//從ES中查詢數(shù)據(jù)
@Test
public void test1() throws IOException {
Integer pageSize = 10;
Integer PageNum = 0;
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder bq = QueryBuilders.boolQuery();
//按時間范圍查詢
QueryBuilder dateBuilder = QueryBuilders.rangeQuery(“pub_date”)
.gte(“2020-09-01 10:30:00”).lte(“2020-09-02 13:50:00”).format(“yyyy-MM-dd HH:mm:ss”);//時間范圍查詢
//根據(jù)id查詢
List idList = new ArrayList();
idList.add(“1”);
idList.add(“2”);
idList.add(“3”);
// idList.add(“4”);
// idList.add(“5”);
QueryBuilder idBuilder = QueryBuilders.termsQuery(“_id”, idList);
// 以某點為中心,搜索指定范圍
GeoDistanceQueryBuilder distanceQueryBuilder = new GeoDistanceQueryBuilder(“l(fā)ocation”);
distanceQueryBuilder.point(39.662263, 118.197815);
//查詢單位:km
distanceQueryBuilder.distance(“6”, DistanceUnit.KILOMETERS);
//構(gòu)建檢索
/*這里說明一下,distanceQueryBuilder就是距離查詢條件,idBuilder就是id過濾條件,
dateBuilder就是時間范圍查詢條件,可以定義一個或多個條件(QueryBuilder),下面的
排序也是同理,可以構(gòu)造多個sortBuilder*/
QueryBuilder query = bq
// .filter(distanceQueryBuilder)
// .must(idBuilder)
.filter(dateBuilder)
;
searchSourceBuilder.query(query);
//按時間排序
// searchSourceBuilder.sort(“pub_date”, SortOrder.DESC);
//按距離排序
GeoDistanceSortBuilder distanceSort = SortBuilders.geoDistanceSort(“l(fā)ocation”, 39.662263, 118.197815);
distanceSort.order(SortOrder.ASC);
distanceSort.geoDistance(GeoDistance.ARC);
distanceSort.unit(DistanceUnit.KILOMETERS);
distanceSort.validation(GeoValidationMethod.STRICT);
searchSourceBuilder.sort(distanceSort);
//查詢es數(shù)據(jù)
searchSourceBuilder.from(PageNum);
searchSourceBuilder.size(pageSize);
searchSourceBuilder.timeout(new TimeValue(100,TimeUnit.SECONDS));
SearchRequest searchRequest = new SearchRequest(“hbp”);
searchRequest.source(searchSourceBuilder);
SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
for(SearchHit hit : hits){
System.out.println(hit.getSourceAsString());
System.out.println(hit.getSortValues()[0]);//獲取排序的距離,index為排序的位置
}
//get方式數(shù)據(jù)查詢 ,參數(shù)為Index,type和id
// GetRequest request = new GetRequest(indexName, “7”);
// GetResponse getResponse1 = client.get(request, COMMON_OPTIONS);
// System.out.println(getResponse1.getSourceAsString());
client.close();
}
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!
如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ava獲?。?/strong>

最后
總而言之,面試官問來問去,問的那些Redis知識點也就這么多吧,復(fù)習(xí)的不夠到位,知識點掌握不夠熟練,所以面試才會卡殼。將這些Redis面試知識解析以及我整理的一些學(xué)習(xí)筆記分享出來給大家參考學(xué)習(xí)
還有更多學(xué)習(xí)筆記面試資料也分享如下:
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實戰(zhàn)項目源碼》,點擊傳送門即可獲取!
" />
最后
總而言之,面試官問來問去,問的那些Redis知識點也就這么多吧,復(fù)習(xí)的不夠到位,知識點掌握不夠熟練,所以面試才會卡殼。將這些Redis面試知識解析以及我整理的一些學(xué)習(xí)筆記分享出來給大家參考學(xué)習(xí)
還有更多學(xué)習(xí)筆記面試資料也分享如下:
[外鏈圖片轉(zhuǎn)存中…(img-OzA30Mz5-1712100094721)]文章來源:http://www.zghlxwxcb.cn/news/detail-848322.html
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實戰(zhàn)項目源碼》,點擊傳送門即可獲取!文章來源地址http://www.zghlxwxcb.cn/news/detail-848322.html
到了這里,關(guān)于ElasticSearch如何使用以及java代碼如何查詢并排序ES中的數(shù)據(jù)(距離排序)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!