crud
// 新增文檔
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
IndexRequest request = new IndexRequest("index");
request.id("1"); // 指定文檔id
String jsonString = "{" +
"\"name\":\"John\"," +
"\"age\":30," +
"\"city\":\"New York\"" +
"}";
request.source(jsonString, XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println(response);
client.close();
// 獲取文檔
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
GetRequest getRequest = new GetRequest("index", "1");
GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
String sourceAsString = getResponse.getSourceAsString();
System.out.println(sourceAsString);
client.close();
// 更新文檔
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
UpdateRequest request = new UpdateRequest("index", "1");
String jsonString = "{" +
"\"name\":\"John Doe\"," +
"\"age\":35," +
"\"city\":\"Los Angeles\"" +
"}";
request.doc(jsonString, XContentType.JSON);
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println(response);
client.close();
// 刪除文檔
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
DeleteRequest request = new DeleteRequest("index", "1");
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
System.out.println(response);
client.close();
es查詢緩存
es查詢緩存
索引路由
Elasticsearch的路由(Routing)特性
在Elasticsearch中,一個索引被分為多個分片,每個分片包含了部分索引數(shù)據(jù)。當我們進行查詢時,Elasticsearch會將查詢請求發(fā)送到每個分片上執(zhí)行查詢操作,然后將結果合并返回給客戶端。
而路由查詢是一種特殊的查詢方式,它允許我們在查詢時指定一個路由鍵來確定查詢應該在哪個分片上執(zhí)行。這樣,查詢就只會在該路由鍵所對應的分片上執(zhí)行,從而避免了在所有分片上執(zhí)行查詢的開銷。
舉個例子,假設我們有一個名為“my_index”的索引,它被分為3個分片,每個分片的路由鍵分別為0、1、2。我們想要查詢該索引中“title”字段包含“elasticsearch”關鍵字的文檔,這時我們可以使用路由查詢來提高查詢效率。
如果我們不使用路由查詢,查詢請求會被發(fā)送到所有3個分片上,每個分片都會執(zhí)行查詢操作,并將結果返回給客戶端。這樣就會產(chǎn)生大量的網(wǎng)絡和計算開銷。
而如果我們使用路由查詢,我們可以在查詢時指定一個路由鍵,如“1”,這樣查詢請求就只會被發(fā)送到路由鍵為1的分片上執(zhí)行查詢操作,其他分片則不會參與查詢。這樣就可以減少查詢的開銷,提高查詢效率。
路由查詢
路由查詢是指在查詢時指定特定的路由鍵,使得查詢只在指定路由鍵所在的分片上執(zhí)行。這種查詢方式可以提高查詢的效率,特別是在分布式環(huán)境下,因為查詢只會在一個分片上執(zhí)行,避免了在所有分片上執(zhí)行查詢的開銷。
使用路由查詢需要在查詢時指定路由鍵,例如:
// 設置routing,加速搜索,一般使用用戶id類似的字段填充
// indexRequest.routing(String.valueOf(i));
GET /my_index/my_type/_search?routing=key_value
{
"query": {
"match": {
"title": "elasticsearch"
}
}
}
無路由查詢
無路由查詢是指在查詢時不指定路由鍵,查詢會在所有分片上執(zhí)行。這種查詢方式適用于單個分片的數(shù)據(jù)量不大的情況下,因為查詢會在所有分片上執(zhí)行,可能會增加查詢的開銷。
使用無路由查詢不需要指定路由鍵,例如:
GET /my_index/my_type/_search
{
"query": {
"match": {
"title": "elasticsearch"
}
}
}
索引ID
Elasticsearch中的每個文檔都有一個唯一的ID,這個ID是由Elasticsearch自動生成的,也可以手動指定。Elasticsearch的索引ID有以下作用:
唯一標識文檔
文檔的ID是文檔在索引中的唯一標識符,它可以用于對文檔進行查找、更新、刪除等操作。如果文檔沒有指定ID,則Elasticsearch會自動生成一個唯一的ID。
索引性能優(yōu)化
Elasticsearch通過ID來分配文檔到不同的分片中,并且在分片之間分配副本。如果文檔ID是隨機生成的,則導致文檔分布不均勻,從而導致性能下降。因此,最好為文檔指定一個有序的ID,如時間戳或自增數(shù)字等,這樣可以讓文檔分布更均勻,提高索引的性能。文章來源:http://www.zghlxwxcb.cn/news/detail-407813.html
避免重復插入
Elasticsearch需要文檔ID來避免在插入文檔時重復插入。如果插入的文檔ID已經(jīng)存在,則Elasticsearch會將新文檔覆蓋已有文檔,而不是插入新文檔。因此,為文檔指定一個唯一的ID可以避免重復插入。
總之,索引ID在Elasticsearch中有著非常重要的作用,它不僅僅是文檔的唯一標識符,還可以對索引性能進行優(yōu)化,并且可以避免文檔的重復插入。因此,在實際使用中,我們應該根據(jù)具體需求來選擇是否手動指定文檔ID。文章來源地址http://www.zghlxwxcb.cn/news/detail-407813.html
到了這里,關于elasticsearch知識庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!