日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】

發(fā)布時間:2024/10/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ES萬字長文教程

  • 一、認識ELK、ES
    • 1.什么是ELK?
    • 2.什么是ElasticSearch
    • 3.ElasticSearch下載安裝教程
  • 二、索引的CRUD
    • 1.創(chuàng)建索引
    • 2.查詢某個索引信息
    • 3.查詢所有索引信息
    • 4.刪除索引
  • 三、文檔的CRUD
    • 1.創(chuàng)建文檔
      • Ⅰ.隨機id
      • Ⅱ.自定義文檔id
    • 2.查詢文檔
      • Ⅰ.查詢文檔信息
      • Ⅱ.全查詢
    • 3.修改文檔
      • Ⅰ.全量修改
      • Ⅱ.局部修改
    • 4.刪除文檔
  • 四、條件查詢
    • 1.請求路徑傳遞參數(shù)
    • 2.請求體傳遞參數(shù)
  • 五、分頁查詢
    • 1.查詢?nèi)?/li>
    • 2.分頁查詢
    • 3.指定數(shù)據(jù)段
    • 4.排序
  • 六、多條件查詢
    • 1.同時滿足
    • 2.滿足某一個條件
  • 七、范圍查詢
  • 八、高亮顯示
  • 九、聚合查詢
  • 十、映射關系(分詞)
  • 十一、Java代碼操作索引
    • 1.創(chuàng)建索引
    • 2.索引查詢
    • 3.刪除索引
  • 十二、API文檔操作
    • 1.創(chuàng)建文檔
    • 2.修改文檔
    • 3.查詢文檔
    • 4.刪除文檔
    • 5.批量創(chuàng)建文檔
    • 6.批量刪除文檔
    • 7.高級查詢
      • Ⅰ.全量查詢
      • Ⅱ.條件查詢
      • Ⅲ.分頁查詢
      • Ⅳ.排序查詢
      • Ⅴ.字段查詢
      • Ⅵ.組合查詢
      • Ⅶ.范圍查詢
      • Ⅷ.模糊查詢
      • Ⅸ.高亮查詢


一、認識ELK、ES

1.什么是ELK?

📚ELK是Elasticsearch、Logstash、Kibana三大開源框架首字母大寫簡稱。
💧Elasticsearch是強大的數(shù)據(jù)搜索引擎,是分布式、通過restful方式進行交互的近實時搜索平臺框架。
💧Logstash是免費且開放的服務器端數(shù)據(jù)處理通道,能夠從多個來源收集數(shù)據(jù),轉換數(shù)據(jù)后將數(shù)據(jù)發(fā)送到數(shù)據(jù)存儲庫中。能夠動態(tài)地采集、轉換和傳輸數(shù)據(jù),不受格式和復雜度的影響。
💧Kibana是針對Elasticsearch的開元分析及可視化平臺,用于搜索、查看交互存儲在Elasticsearch索引中的數(shù)據(jù)。

2.什么是ElasticSearch

elasticsearch:基于lucene的開源搜索引擎,是一個分布式的搜索分析系統(tǒng),提供搜集、分析、存儲數(shù)據(jù)三大功能。

3.ElasticSearch下載安裝教程

ElasticSearch下載安裝教程詳解【7.10版本】:https://blog.csdn.net/Kevinnsm/article/details/120604537?spm=1001.2014.3001.5501



二、索引的CRUD

默認已經(jīng)打開ES,使用postman進行測試

1.創(chuàng)建索引

如下圖所示,創(chuàng)建索引obj,

(1)localhost:9200代表Es服務器地址
(2)obj代表索引
(3)put請求代表創(chuàng)建

2.查詢某個索引信息

(1)localhost:9200代表Es服務器地址
(2)obj代表索引
(3)get代表查詢

3.查詢所有索引信息

localhost:9200/_cat/indices?v

4.刪除索引

(1)localhost:9200代表Es地址
(2)obj代表要刪除的索引
(3)delete代表刪除


查詢所有索引信息就會發(fā)現(xiàn)不存在了



三、文檔的CRUD

1.創(chuàng)建文檔

Ⅰ.隨機id

首先創(chuàng)建一個obj索引

創(chuàng)建文檔

obj代表索引
_doc代表在該索引下創(chuàng)建文檔
post代表創(chuàng)建

Ⅱ.自定義文檔id

localhost:9200/索引/_doc/文檔id

2.查詢文檔

Ⅰ.查詢文檔信息

localhost:9200/索引/_doc/文檔id
請求方式:get

Ⅱ.全查詢

localhost:9200/obj/_search
請求方式 get

3.修改文檔

Ⅰ.全量修改

修改之前的數(shù)據(jù)如下,對name進行修改

put請求代表全量修改


再次查詢結果如下,修改成功!

Ⅱ.局部修改

_update代表修改
post請求局部修改
1111為文檔id


修改之后內(nèi)容如下

4.刪除文檔

delete請求
obj:索引
1111:文檔id




四、條件查詢

實現(xiàn)在obj索引下創(chuàng)建四個文檔


1.請求路徑傳遞參數(shù)

_search查詢該索引下的所有文檔
q=province:beijing代表查詢條件

2.請求體傳遞參數(shù)

query代表查詢
match代表匹配條件

五、分頁查詢

1.查詢?nèi)?/h2> {"query":{ 查詢"match_all":{ 匹配所有}} }

match_all代表查詢?nèi)?br />

2.分頁查詢

from計算公式(頁碼- 1)* size

{"query":{"match_all":{}},"from":0, 第幾個數(shù)據(jù)"size":1 每頁數(shù)據(jù)大小 }

3.指定數(shù)據(jù)段

{"query":{"match_all":{}},"from":0,"size":2,"_source":["name"] 指定name數(shù)據(jù)段 }

4.排序

{"query":{"match_all":{ //匹配所有}},"from":0, //從第零條數(shù)據(jù)開始"size":3, //每頁大小"_source":["age"], //執(zhí)行age字段"sort" : {"age" : { //按照age字段排序"order" : "asc" //升序排列}} }




六、多條件查詢

1.同時滿足

{"query" : {"bool" : { //多條件"must" : [ //必須同時滿足{"match" : { //匹配條件"province" : "beijing"}}]}} }


多個匹配條件

{"query" : {"bool" : {"must" : [{"match" : {"province" : "beijing"}},{"match" : {"name" : "aaa"}}]}} }

2.滿足某一個條件

{"query" : {"bool" : {"should" : [ //表示滿足一個match即可{"match" : {"province" : "beijing"}},{"match" : {"name" : "bbb"}}]}} }

七、范圍查詢

{"query" : {"bool" : {"must" : [{"match" : {"province" : "beijing"}}],"filter" : { //過濾"range" : { //范圍"age" : {"gt" : "18" //年齡大于18}}}}} }




八、高亮顯示

{"query" : {"match" : {"name" : "aaa"}},"highlight" : { //高亮顯示"fields" : {"name" : {}}} }


九、聚合查詢

{"aggs" : { //聚合查詢"group_one" : { //自定義組名"terms" : { //分組查詢"field" : "age" }}},"size" : 0 //去掉原始數(shù)據(jù)(因為默認也會查詢出所有原始數(shù)據(jù)) }

{"aggs" : { //聚合查詢"age_avg" : { //自定義"avg" : { //求平均值"field" : "age"}}},"size" : 0 }



十、映射關系(分詞)

首先創(chuàng)建user索引,然后執(zhí)行_mapping開始映射

{"properties" : {"name" : { "type" : "text", //表示name進行分詞"index" : true //可以索引查詢},"age" : {"type" : "keyword", //不能進行分詞操作(也就是必須全匹配)"index" : true },"province" : {"type" : "keyword","index" : false //不能進行索引查詢}} }

向索引中加入文檔內(nèi)容

查詢




十一、Java代碼操作索引

在@Before和@After方法中已經(jīng)對Client進行了初始化和關閉

1.創(chuàng)建索引

public class EsClient {public static void main(String[] args) throws IOException {//創(chuàng)建連接RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));//創(chuàng)建索引對象CreateIndexRequest request = new CreateIndexRequest("api");//RequestOptions.DEFAULT代表其他參數(shù)默認值CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);//創(chuàng)建的成功或者失敗boolean flag = response.isAcknowledged();System.out.println("索引:"+flag);client.close();} }


使用postman查詢?nèi)克饕?br />

2.索引查詢

private RestHighLevelClient client;@Beforepublic void init() {client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));}@Testpublic void get() throws IOException {GetIndexRequest request = new GetIndexRequest("api");GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);System.out.println(response.getAliases());System.out.println(response.getMappings());System.out.println(response.getDefaultSettings());}@Afterpublic void close() throws IOException {client.close();}

3.刪除索引

@Testpublic void deleteIndex() throws IOException {DeleteIndexRequest request = new DeleteIndexRequest("api");AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);System.out.println(response.isAcknowledged());}




十二、API文檔操作

1.創(chuàng)建文檔

@Testpublic void createDoc() throws IOException {IndexRequest request = new IndexRequest();User user = new User();user.setName("張山").setAge(20).setProvince("henan");//將Java對象轉換為Json字符串ObjectMapper mapper = new ObjectMapper();String valueJson = mapper.writeValueAsString(user);//放入到請求request中request.source(valueJson, XContentType.JSON);//在user索引下創(chuàng)建文檔(id為1001)request.index("user").id("1001");IndexResponse response = client.index(request, RequestOptions.DEFAULT);System.out.println(response.getResult());}


2.修改文檔

public void updateDoc() throws IOException {UpdateRequest request = new UpdateRequest();//對索引user下的文檔1001進行修改request.index("user").id("1001");//修改年齡為51request.doc(XContentType.JSON, "age", 51);UpdateResponse response = client.update(request, RequestOptions.DEFAULT);System.out.println(response.getResult());}

3.查詢文檔

@Testpublic void getDoc() throws IOException {GetRequest request = new GetRequest();request.index("user").id("1001");GetResponse response = client.get(request, RequestOptions.DEFAULT);System.out.println(response.getSourceAsString());}

4.刪除文檔

@Testpublic void deleteDoc() throws IOException {DeleteRequest request = new DeleteRequest();request.index("user").id("1001");DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);System.out.println(response.getResult());}


5.批量創(chuàng)建文檔

/*** 批量創(chuàng)建文檔* @throws IOException*/@Testpublic void bulkCreateDoc() throws IOException {BulkRequest request = new BulkRequest();request.add(new IndexRequest("user").id("1000").source(XContentType.JSON, "name", "李氏"));request.add(new IndexRequest("user").id("1001").source(XContentType.JSON, "name", "王二"));request.add(new IndexRequest("user").id("1002").source(XContentType.JSON, "name", "kO"));BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);System.out.println(response.getTook());System.out.println(response.getItems());}

6.批量刪除文檔

/*** 批量刪除文檔* @throws IOException*/@Testpublic void bulkDeleteDoc() throws IOException {BulkRequest request = new BulkRequest();request.add(new DeleteRequest().index("user").id("1000"));request.add(new DeleteRequest().index("user").id("1001"));request.add(new DeleteRequest().index("user").id("1002"));BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);System.out.println(response.getTook());}

7.高級查詢

Ⅰ.全量查詢

/*** 全量查詢* @throws IOException*/@Testpublic void searchAll() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));SearchResponse response = client.search(request, RequestOptions.DEFAULT);SearchHits hits = response.getHits();for (SearchHit hit : hits) {System.out.println(hit);}}

Ⅱ.條件查詢

/*** 條件查詢* @throws IOException*/@Testpublic void conditionSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");//匹配所有name=ko1的數(shù)據(jù)request.source(new SearchSourceBuilder().query(QueryBuilders.termsQuery("name", "ko1")));SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

Ⅲ.分頁查詢

/*** 分頁查詢* @throws IOException*/@Testpublic void pageSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());builder.from(0).size(2);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

Ⅳ.排序查詢

為每個數(shù)據(jù)加入age屬性

/*** 排序查詢* @throws IOException*/@Testpublic void sortSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());builder.sort("age", SortOrder.ASC);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

Ⅴ.字段查詢

/*** 字段查詢* @throws IOException*/@Testpublic void fieldSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());String[] includes = {"name", "age"}; //包含字段String[] excludes = {"age"}; //排除字段builder.fetchSource(includes, excludes);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

Ⅵ.組合查詢

必須同時滿足must中的條件

/*** 組合查詢** @throws IOException*/@Testpublic void groupSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();boolQuery.must(QueryBuilders.matchQuery("name", "ko1"));builder.query(boolQuery);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

should意味著或的意思 與must相反

/*** 組合查詢** @throws IOException*/@Testpublic void groupSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();// boolQuery.must(QueryBuilders.matchQuery("name", "ko1"));boolQuery.should(QueryBuilders.matchQuery("name", "ko1"));boolQuery.should(QueryBuilders.matchQuery("name", "ko2"));builder.query(boolQuery);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

Ⅶ.范圍查詢

/*** 范圍查詢* @throws IOException*/@Testpublic void rangeSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder();RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");rangeQuery.gte(20).lte("50");builder.query(rangeQuery);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

Ⅷ.模糊查詢

Fuzziness.ONE代表相差一個字符 可以查詢出來

/*** 模糊查詢* @throws IOException*/@Testpublic void partSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder();FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("name", "ko").fuzziness(Fuzziness.ONE);builder.query(fuzzyQueryBuilder);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit.getSourceAsString());}}

Ⅸ.高亮查詢

/*** 高亮查詢* @throws IOException*/@Testpublic void highLightSearch() throws IOException {SearchRequest request = new SearchRequest();request.indices("user");SearchSourceBuilder builder = new SearchSourceBuilder();TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "ko1");HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.preTags("<font color='red'>");highlightBuilder.postTags("</font>");highlightBuilder.field("name");builder.highlighter(highlightBuilder);builder.query(termQueryBuilder);request.source(builder);SearchResponse response = client.search(request, RequestOptions.DEFAULT);for (SearchHit hit : response.getHits()) {System.out.println(hit);}}

總結

以上是生活随笔為你收集整理的ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。