ElasticSearch-7.10版本最新万字长文教程【距离搞懂ELK核心你只差这一片文章】
ES萬字長文教程
- 一、認識ELK、ES
- 1.什么是ELK?
- 2.什么是ElasticSearch
- 3.ElasticSearch下載安裝教程
- 二、索引的CRUD
- 1.創建索引
- 2.查詢某個索引信息
- 3.查詢所有索引信息
- 4.刪除索引
- 三、文檔的CRUD
- 1.創建文檔
- Ⅰ.隨機id
- Ⅱ.自定義文檔id
- 2.查詢文檔
- Ⅰ.查詢文檔信息
- Ⅱ.全查詢
- 3.修改文檔
- Ⅰ.全量修改
- Ⅱ.局部修改
- 4.刪除文檔
- 四、條件查詢
- 1.請求路徑傳遞參數
- 2.請求體傳遞參數
- 五、分頁查詢
- 1.查詢全部
- 2.分頁查詢
- 3.指定數據段
- 4.排序
- 六、多條件查詢
- 1.同時滿足
- 2.滿足某一個條件
- 七、范圍查詢
- 八、高亮顯示
- 九、聚合查詢
- 十、映射關系(分詞)
- 十一、Java代碼操作索引
- 1.創建索引
- 2.索引查詢
- 3.刪除索引
- 十二、API文檔操作
- 1.創建文檔
- 2.修改文檔
- 3.查詢文檔
- 4.刪除文檔
- 5.批量創建文檔
- 6.批量刪除文檔
- 7.高級查詢
- Ⅰ.全量查詢
- Ⅱ.條件查詢
- Ⅲ.分頁查詢
- Ⅳ.排序查詢
- Ⅴ.字段查詢
- Ⅵ.組合查詢
- Ⅶ.范圍查詢
- Ⅷ.模糊查詢
- Ⅸ.高亮查詢
一、認識ELK、ES
1.什么是ELK?
📚ELK是Elasticsearch、Logstash、Kibana三大開源框架首字母大寫簡稱。
💧Elasticsearch是強大的數據搜索引擎,是分布式、通過restful方式進行交互的近實時搜索平臺框架。
💧Logstash是免費且開放的服務器端數據處理通道,能夠從多個來源收集數據,轉換數據后將數據發送到數據存儲庫中。能夠動態地采集、轉換和傳輸數據,不受格式和復雜度的影響。
💧Kibana是針對Elasticsearch的開元分析及可視化平臺,用于搜索、查看交互存儲在Elasticsearch索引中的數據。
2.什么是ElasticSearch
elasticsearch:基于lucene的開源搜索引擎,是一個分布式的搜索分析系統,提供搜集、分析、存儲數據三大功能。
3.ElasticSearch下載安裝教程
ElasticSearch下載安裝教程詳解【7.10版本】:https://blog.csdn.net/Kevinnsm/article/details/120604537?spm=1001.2014.3001.5501
二、索引的CRUD
默認已經打開ES,使用postman進行測試
1.創建索引
如下圖所示,創建索引obj,
(1)localhost:9200代表Es服務器地址
(2)obj代表索引
(3)put請求代表創建
2.查詢某個索引信息
(1)localhost:9200代表Es服務器地址
(2)obj代表索引
(3)get代表查詢
3.查詢所有索引信息
localhost:9200/_cat/indices?v
4.刪除索引
(1)localhost:9200代表Es地址
(2)obj代表要刪除的索引
(3)delete代表刪除
查詢所有索引信息就會發現不存在了
三、文檔的CRUD
1.創建文檔
Ⅰ.隨機id
首先創建一個obj索引
創建文檔
obj代表索引
_doc代表在該索引下創建文檔
post代表創建
Ⅱ.自定義文檔id
localhost:9200/索引/_doc/文檔id
2.查詢文檔
Ⅰ.查詢文檔信息
localhost:9200/索引/_doc/文檔id
請求方式:get
Ⅱ.全查詢
localhost:9200/obj/_search
請求方式 get
3.修改文檔
Ⅰ.全量修改
修改之前的數據如下,對name進行修改
put請求代表全量修改
再次查詢結果如下,修改成功!
Ⅱ.局部修改
_update代表修改
post請求局部修改
1111為文檔id
修改之后內容如下
4.刪除文檔
delete請求
obj:索引
1111:文檔id
四、條件查詢
實現在obj索引下創建四個文檔
1.請求路徑傳遞參數
_search查詢該索引下的所有文檔
q=province:beijing代表查詢條件
2.請求體傳遞參數
query代表查詢
match代表匹配條件
五、分頁查詢
1.查詢全部
{"query":{ 查詢"match_all":{ 匹配所有}} }match_all代表查詢全部
2.分頁查詢
from計算公式(頁碼- 1)* size
{"query":{"match_all":{}},"from":0, 第幾個數據"size":1 每頁數據大小 }3.指定數據段
{"query":{"match_all":{}},"from":0,"size":2,"_source":["name"] 指定name數據段 }4.排序
{"query":{"match_all":{ //匹配所有}},"from":0, //從第零條數據開始"size":3, //每頁大小"_source":["age"], //執行age字段"sort" : {"age" : { //按照age字段排序"order" : "asc" //升序排列}} }
六、多條件查詢
1.同時滿足
{"query" : {"bool" : { //多條件"must" : [ //必須同時滿足{"match" : { //匹配條件"province" : "beijing"}}]}} }
多個匹配條件
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 //去掉原始數據(因為默認也會查詢出所有原始數據) } {"aggs" : { //聚合查詢"age_avg" : { //自定義"avg" : { //求平均值"field" : "age"}}},"size" : 0 }
十、映射關系(分詞)
首先創建user索引,然后執行_mapping開始映射
向索引中加入文檔內容
查詢
十一、Java代碼操作索引
在@Before和@After方法中已經對Client進行了初始化和關閉
1.創建索引
public class EsClient {public static void main(String[] args) throws IOException {//創建連接RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));//創建索引對象CreateIndexRequest request = new CreateIndexRequest("api");//RequestOptions.DEFAULT代表其他參數默認值CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);//創建的成功或者失敗boolean flag = response.isAcknowledged();System.out.println("索引:"+flag);client.close();} }
使用postman查詢全部索引
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.創建文檔
@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索引下創建文檔(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.批量創建文檔
/*** 批量創建文檔* @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的數據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());}}Ⅳ.排序查詢
為每個數據加入age屬性
Ⅴ.字段查詢
/*** 字段查詢* @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核心你只差这一片文章】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ElasticSearch下载安装教程详
- 下一篇: Linux下安装部署ElasticSea