自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ES開發(fā)指南|如何快速上手ElasticSearch

系統(tǒng)
ElasticSearch不只是全文檢索引擎的領(lǐng)頭羊,現(xiàn)在也是各個(gè)大廠標(biāo)配的大數(shù)據(jù)平臺(tái)之一,被廣泛用于搜索加速,用戶標(biāo)簽、畫像系統(tǒng)、向量搜索等領(lǐng)域,它不是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,但這個(gè)信息爆炸,數(shù)據(jù)堆積的時(shí)代,我們獲取知識(shí)的方式已經(jīng)極大的改變,搜索、提問成了獲取知識(shí)的第一手段。對(duì)ElasticSearch工程師的要求已經(jīng)不亞于甚至超過了對(duì)DBA的要求。那么,要如何才能成為一個(gè)被認(rèn)可的ElasticSearch工程師?希望這篇文章能夠從一個(gè)開發(fā)工程師的角度,給大家?guī)韼椭?/div>

 前言

ElasticSearch不只是全文檢索引擎的領(lǐng)頭羊,現(xiàn)在也是各個(gè)大廠標(biāo)配的大數(shù)據(jù)平臺(tái)之一,被廣泛用于搜索加速,用戶標(biāo)簽、畫像系統(tǒng)、向量搜索等領(lǐng)域,它不是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,但這個(gè)信息爆炸,數(shù)據(jù)堆積的時(shí)代,我們獲取知識(shí)的方式已經(jīng)極大的改變,搜索、提問成了獲取知識(shí)的第一手段。對(duì)ElasticSearch工程師的要求已經(jīng)不亞于甚至超過了對(duì)DBA的要求。那么,要如何才能成為一個(gè)被認(rèn)可的ElasticSearch工程師?希望這篇文章能夠從一個(gè)開發(fā)工程師的角度,給大家?guī)韼椭?/p>

1、全文檢索

「Lucence的簡(jiǎn)單入門:」

  • 在此之前我們先談?wù)凩ucence,它是apache軟件基金會(huì)發(fā)布的一個(gè)開放源代碼的全文檢索引擎工具包,由資深全文檢索專家Doug Cutting所撰寫,它是一個(gè)全文檢索引擎的架構(gòu),提供了完整的創(chuàng)建索引和查詢索引,以及部分文本分析的引擎。
  • Lucence的目的是為軟件開發(fā)人員提供一個(gè)簡(jiǎn)單易用的工具包,以方便在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎,Lucence在全文檢索領(lǐng)域是一個(gè)經(jīng)典的祖先,現(xiàn)在很多檢索引擎都在其基礎(chǔ)上創(chuàng)建的,思想是相通的。
  • Lucence是根據(jù)關(guān)鍵字來搜索的文本搜索工具,只能在某個(gè)網(wǎng)站內(nèi)容搜索文本內(nèi)容,不能跨網(wǎng)站搜索。
  • 想進(jìn)一步了解Lucence的可以下面博客查閱

https://www.cnblogs.com/ysdrzp/p/10009660.html

2、ElasticSearch是什么?

「倒排索引原理:」

  • 倒排索引是目前搜索引擎公司對(duì)搜索引擎最常用的存儲(chǔ)方式,也是搜索引擎的核心內(nèi)容,在搜索引擎的實(shí)際應(yīng)用中,有時(shí)需要按照關(guān)鍵字的某些值查找記錄,所以是按照關(guān)鍵字建立索引,這個(gè)索引就是倒排索引

「ElasticSearch概念:」

  • ElasticSearch是一個(gè)基于Lucence的全文搜索服務(wù)器,java語言編寫,提供了分布式的搜索引擎,安裝方便,使用簡(jiǎn)單

3、ElasticSearch能干什么?

「主要用途:」

  • 分布式下首頁搜索,如百度,淘寶,京東...
  • 基于索引數(shù)據(jù)存儲(chǔ)

4、Elastic有哪些產(chǎn)品

「主要產(chǎn)品:」

  • E(ElasticSearch)
  • L(logstash)
  • K(Kibana)
  • B(Beats)

5、ElasticSearch的安裝以及使用

「安裝ElasticSearch:」

  1. Elasticsearch官網(wǎng):https://www.elastic.co/cn/products/elasticsearch 
  2. 下載地址:https://www.elastic.co/downloads/past-releases 
  3. 安裝Elasticsearch前提條件:JDK1.8及以上 

「安裝:」

  • ElasticSearch無需安裝,解壓即用

「運(yùn)行:」

  1. 進(jìn)入elasticsearch/bin目錄,雙擊可執(zhí)行文件elasticsearch.bat 
  2. 可以看到綁定了兩個(gè)端口: 
  3. 9300:Java程序訪問的端口 
  4. 9200:瀏覽器、postman訪問的端口 
  5. 我們?cè)跒g覽器中訪問:http://127.0.0.1:9200,出現(xiàn)json數(shù)據(jù)字符串,說明安裝成功。 

6、安裝Head插件

「什么是Head:」

  • ElasticSearch只是后端提供各種API,那么怎么直觀的使用它呢?ElasticSearch-head將是一款專門針對(duì)ElasticSearch的客戶端工具
  • ElasticSearch-head配置包,下載地址:https://github.com/mobz/elasticsearch-head

「安裝Head:」

  1. 注意:es5以上版本安裝head需要安裝node和grunt 
  2. 第一步:從地址:https://nodejs.org/en/download/ 下載相應(yīng)系統(tǒng)的msi,雙擊安裝。 
  3. 第二步:安裝完成用cmd進(jìn)入安裝目錄執(zhí)行 node -v可查看版本號(hào) 
  4.                能看到版本號(hào)說明node安裝成功 
  5. 第三步:執(zhí)行 npm install -g grunt-cli 安裝grunt ,安裝完成后執(zhí)行g(shù)runt   - version查看是否安裝成功,會(huì)顯示安裝的版本號(hào)  

「配置運(yùn)行:」

  1. 第一步:進(jìn)入Elasticsearch安裝目錄下的config目錄,修改elasticsearch.yml文件.在文件的末尾加入以下代碼 
  2. http.cors.enabled: true  
  3. http.cors.allow-origin: "*" 
  4. node.master: true 
  5. node.data: true 
  6. 然后去掉 
  7. network.host: 192.168.0.1的注釋并改為network.host: 0.0.0.0, 
  8. 去掉cluster.name;node.name;http.port的注釋(也就是去掉#) 
  9.  
  10. 第二步:雙擊elasticsearch.bat重啟Elasticsearch 
  11.  
  12. 第三步:在https://github.com/mobz/elasticsearch-head中下載head插件,選擇下載zip 
  13.  
  14. 第四步:解壓到指定文件夾下,D:\environment\elasticsearch-head-master 進(jìn)入該文件夾,修改D:\environment\elasticsearch-head-master\Gruntfile.js 在對(duì)應(yīng)的位置加上hostname:’*’。 
  15. connect: { 
  16.    server: { 
  17.     options: { 
  18.      hostname:'*'
  19.      port: 9100, 
  20.      base: '.'
  21.      keepalive: true 
  22.     } 
  23.    } 
  24.   } 
  25.  
  26. 第五步: 
  27. 打開cmd命令行窗口 ,在D:\environment\elasticsearch-head-master 下執(zhí)行npm install 安裝 
  28. 完成后執(zhí)行g(shù)runt server 或者npm run start 運(yùn)行head插件,如果運(yùn)行不成功建議重新安裝grunt。 

「安裝完成:」

  • 打開瀏覽器訪問:http://127.0.0.1:9100

「安裝lk分詞器:」

  • ik分詞器ip:http://www.oschina.net/news/2660
  • ElasticSearch默認(rèn)采用的分詞器,是單個(gè)字分詞,效果很差,所以我們需要安裝一個(gè)更實(shí)用的分詞器,這里采用IK分詞器
  1. 下載 
  2. 注意:你的Elasticsearch和IK分詞器必須版本統(tǒng)一 
  3. 源碼下載地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/6.2.x 
  4.  
  5. jar包下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases 
  6.  
  7. 安裝 
  8. 無需安裝,解壓即可使用 
  9. 我們將其改名為ik,并復(fù)制到Elasticsearch的解壓目錄下的plugins下面 
  10.  
  11. 重啟elasticSearch即可 

7、SpringBoot整合ElasticSearch

「構(gòu)建SpringBoot工程,并導(dǎo)入依賴:」

  1. <dependency> 
  2.     <groupId>org.springframework.boot</groupId> 
  3.     <artifactId>spring-boot-starter-data-elasticsearch</artifactId> 
  4. </dependency> 

「編寫實(shí)體類,對(duì)應(yīng)ElasticSearch中的document:」

  1. // 表示此類對(duì)應(yīng)es中的一條數(shù)據(jù) 
  2. type:相當(dāng)于mysql中的表 
  3. indexName:相當(dāng)于mysql中的數(shù)據(jù)庫 
  4. @Document(type = "docs",indexName = "yx")  
  5. public class User implements Serializable { 
  6.     @Id     //主鍵映射 
  7.     private int userId; 
  8.     @Field(type = FieldType.Text)   //成員映射,type:表示數(shù)據(jù)類型 
  9.     private String userName; 
  10.     @Field 
  11.     private double price; 

「測(cè)試(前提ElasticSearch客戶端以及服務(wù)器全部安裝完備):」

  1. 1、測(cè)試類中對(duì)應(yīng)操作es的對(duì)象是ElasticsearchTemplate 
  2.       使用詳見https://blog.csdn.net/chen_2890/article/details/83895646 
  3. 2、工程化測(cè)試 
  4. 2.1新建service以及serviceimpl 
  5. 2.3聲明接口extends   ElasticsearchRepository<User,Integer>,第一個(gè)參數(shù)表示實(shí)體類(document),第二個(gè)參數(shù)表示實(shí)體對(duì)象主鍵的包裝類 
  6. 2.4新建controll 
  7. 2.5啟動(dòng)服務(wù)器訪問地址 

「ElasticSearch常見方法使用:」

  1. //根據(jù)價(jià)格區(qū)間查詢 
  2.     @Test 
  3.     public void queryByPrice(){ 
  4.  
  5. //       List<User> users = userRepository.findByPriceBetween(12.3,13); 
  6. //        for (int i = 0; i < users.size(); i++) { 
  7. //            System.out.println(users.get(i)); 
  8. //        } 
  9.         //查詢12.3之前的 
  10. //        List<User> users = userRepository.findByPriceBefore(12.3); 
  11. //        System.out.println(users); 
  12.         List<User> users = userService.findByPriceBetween(12.3,0); 
  13.         for (User u :users) { 
  14.             System.out.println(u); 
  15.         } 
  16.     } 
  17.  
  18.     //自定義查詢之分頁查詢 
  19.     @Test 
  20.     public void queryByPages(){ 
  21.         //創(chuàng)建構(gòu)建器 
  22.         NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); 
  23.  
  24.         //添加基本分詞查詢,fuzzyQuery模糊查詢 
  25.         queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName""羽")); 
  26.  
  27.         // 分頁: 
  28.         int page = 1; 
  29.         int size = 2; 
  30.         queryBuilder.withPageable(PageRequest.of(page,size)); 
  31.  
  32.         Page<User> users = userRepository.search(queryBuilder.build()); 
  33.         System.out.println("總條數(shù)是:"+users.getTotalElements()); 
  34.         System.out.println("總頁數(shù)是:"+users.getTotalPages()); 
  35.         System.out.println("當(dāng)前頁是:"+users.getNumber()); 
  36.         System.out.println("每一頁的數(shù)量是"+users.getSize()); 
  37.  
  38.         for (User user:users) { 
  39.             System.out.println(user); 
  40.         } 
  41.     } 
  42.  
  43.     //查詢排序 
  44.     @Test 
  45.     public void searchAndSort(){ 
  46.         //構(gòu)建查詢 
  47.         NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); 
  48.         //模糊查詢 
  49.         queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName""羽")); 
  50.         //構(gòu)建排序 
  51.         queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC)); 
  52.         Page<User> users = userRepository.search(queryBuilder.build()); 
  53.         for (User user:users) { 
  54.             System.out.println(user); 
  55.         } 
  56.     } 

結(jié)語

本篇關(guān)于ElasticSearch的介紹就先到這里結(jié)束了,后續(xù)會(huì)出更多關(guān)于ElasticSearch系列更多文章,謝謝大家支持!

 

責(zé)任編輯:姜華 來源: 淺羽的IT小屋
相關(guān)推薦

2023-06-13 08:00:57

ChatGPT語言模型

2024-03-26 00:00:01

2021-09-03 11:26:39

分詞器ElasticSear

2024-01-29 00:36:50

Backstage設(shè)施工具

2011-07-25 16:21:22

Sencha touc

2022-08-02 08:01:09

開發(fā)插件Chrome前端技術(shù)

2014-12-12 10:25:21

Xcode 6iOS快速上手

2021-11-26 09:40:37

EclipseIDEA開發(fā)

2011-06-09 18:24:36

QT Wince

2012-03-26 09:27:40

谷歌安卓開發(fā)谷歌安卓

2023-05-15 18:44:07

前端開發(fā)

2014-08-01 09:57:52

Node.jsNode.js插件

2009-06-24 16:30:21

JSF組件模型

2013-11-19 12:53:33

OA信息化

2022-08-19 07:13:45

SQL方法編程

2015-11-12 16:14:52

Python開發(fā)實(shí)踐

2010-06-13 09:27:56

Widget開發(fā)

2015-12-16 10:30:18

前端開發(fā)指南

2019-10-31 08:00:00

機(jī)器學(xué)習(xí)人工智能AI

2025-01-15 07:55:30

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)