ES開發(fā)指南|如何快速上手ElasticSearch
Python實戰(zhàn)社群
Java實戰(zhàn)社群
長按識別下方二維碼,按需求添加
掃碼關(guān)注添加客服
進Python社群▲
掃碼關(guān)注添加客服
進Java社群▲
作者丨淺羽Eric
來源丨淺羽的IT小屋
1、全文檢索
「Lucence的簡單入門:」
在此之前我們先談?wù)凩ucence,它是apache軟件基金會發(fā)布的一個開放源代碼的全文檢索引擎工具包,由資深全文檢索專家Doug Cutting所撰寫,它是一個全文檢索引擎的架構(gòu),提供了完整的創(chuàng)建索引和查詢索引,以及部分文本分析的引擎。 Lucence的目的是為軟件開發(fā)人員提供一個簡單易用的工具包,以方便在目標系統(tǒng)中實現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎,Lucence在全文檢索領(lǐng)域是一個經(jīng)典的祖先,現(xiàn)在很多檢索引擎都在其基礎(chǔ)上創(chuàng)建的,思想是相通的。 Lucence是根據(jù)關(guān)鍵字來搜索的文本搜索工具,只能在某個網(wǎng)站內(nèi)容搜索文本內(nèi)容,不能跨網(wǎng)站搜索。 想進一步了解Lucence的可以下面博客查閱
https://www.cnblogs.com/ysdrzp/p/10009660.html2、ElasticSearch是什么?
「倒排索引原理:」
倒排索引是目前搜索引擎公司對搜索引擎最常用的存儲方式,也是搜索引擎的核心內(nèi)容,在搜索引擎的實際應(yīng)用中,有時需要按照關(guān)鍵字的某些值查找記錄,所以是按照關(guān)鍵字建立索引,這個索引就是倒排索引
「ElasticSearch概念:」
ElasticSearch是一個基于Lucence的全文搜索服務(wù)器,java語言編寫,提供了分布式的搜索引擎,安裝方便,使用簡單
「主要用途:」
分布式下首頁搜索,如百度,淘寶,京東... 基于索引數(shù)據(jù)存儲
「主要產(chǎn)品:」
E(ElasticSearch) L(logstash) K(Kibana) B(Beats)
「安裝ElasticSearch:」
Elasticsearch官網(wǎng):https://www.elastic.co/cn/products/elasticsearch
下載地址:https://www.elastic.co/downloads/past-releases
安裝Elasticsearch前提條件:JDK1.8及以上
「安裝:」
ElasticSearch無需安裝,解壓即用
「運行:」
進入elasticsearch/bin目錄,雙擊可執(zhí)行文件elasticsearch.bat
可以看到綁定了兩個端口:
9300:Java程序訪問的端口
9200:瀏覽器、postman訪問的端口
我們在瀏覽器中訪問:http://127.0.0.1:9200,出現(xiàn)json數(shù)據(jù)字符串,說明安裝成功。
「什么是Head:」
ElasticSearch只是后端提供各種API,那么怎么直觀的使用它呢?ElasticSearch-head將是一款專門針對ElasticSearch的客戶端工具 ElasticSearch-head配置包,下載地址:https://github.com/mobz/elasticsearch-head
注意:es5以上版本安裝head需要安裝node和grunt
第一步:從地址:https://nodejs.org/en/download/?下載相應(yīng)系統(tǒng)的msi,雙擊安裝。
第二步:安裝完成用cmd進入安裝目錄執(zhí)行 node -v可查看版本號
???????????????能看到版本號說明node安裝成功
第三步:執(zhí)行 npm install -g grunt-cli 安裝grunt ,安裝完成后執(zhí)行g(shù)runt ??- version查看是否安裝成功,會顯示安裝的版本號?
第一步:進入Elasticsearch安裝目錄下的config目錄,修改elasticsearch.yml文件.在文件的末尾加入以下代碼
http.cors.enabled:?true?
http.cors.allow-origin:?"*"
node.master:?true
node.data:?true
然后去掉
network.host:?192.168.0.1的注釋并改為network.host:?0.0.0.0,
去掉cluster.name;node.name;http.port的注釋(也就是去掉#)
第二步:雙擊elasticsearch.bat重啟Elasticsearch
第三步:在https://github.com/mobz/elasticsearch-head中下載head插件,選擇下載zip
第四步:解壓到指定文件夾下,D:\environment\elasticsearch-head-master 進入該文件夾,修改D:\environment\elasticsearch-head-master\Gruntfile.js 在對應(yīng)的位置加上hostname:’*’。
connect:?{
???server:?{
????options:?{
?????hostname:'*',
?????port:?9100,
?????base:?'.',
?????keepalive:?true
????}
???}
??}
第五步:
打開cmd命令行窗口?,在D:\environment\elasticsearch-head-master?下執(zhí)行npm?install?安裝
完成后執(zhí)行g(shù)runt server 或者npm run start 運行head插件,如果運行不成功建議重新安裝grunt。
「安裝完成:」
打開瀏覽器訪問:http://127.0.0.1:9100

「安裝lk分詞器:」
ik分詞器ip:http://www.oschina.net/news/2660 ElasticSearch默認采用的分詞器,是單個字分詞,效果很差,所以我們需要安裝一個更實用的分詞器,這里采用IK分詞器
下載
注意:你的Elasticsearch和IK分詞器必須版本統(tǒng)一
源碼下載地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/6.2.x
jar包下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
安裝
無需安裝,解壓即可使用
我們將其改名為ik,并復(fù)制到Elasticsearch的解壓目錄下的plugins下面
重啟elasticSearch即可「構(gòu)建SpringBoot工程,并導入依賴:」
????org.springframework.boot
????spring-boot-starter-data-elasticsearch
「編寫實體類,對應(yīng)ElasticSearch中的document:」
//?表示此類對應(yīng)es中的一條數(shù)據(jù)
type:相當于mysql中的表
indexName:相當于mysql中的數(shù)據(jù)庫
@Document(type?=?"docs",indexName?=?"yx")?
public?class?User?implements?Serializable?{
????@Id?????//主鍵映射
????private?int?userId;
????@Field(type?=?FieldType.Text)???//成員映射,type:表示數(shù)據(jù)類型
????private?String?userName;
????@Field
????private?double?price;「測試(前提ElasticSearch客戶端以及服務(wù)器全部安裝完備):」
1、測試類中對應(yīng)操作es的對象是ElasticsearchTemplate
??????使用詳見https://blog.csdn.net/chen_2890/article/details/83895646
2、工程化測試
2.1新建service以及serviceimpl
2.3聲明接口extends???ElasticsearchRepository,第一個參數(shù)表示實體類(document),第二個參數(shù)表示實體對象主鍵的包裝類
2.4新建controll
2.5啟動服務(wù)器訪問地址
「ElasticSearch常見方法使用:」
//根據(jù)價格區(qū)間查詢
????@Test
????public?void?queryByPrice(){
//???????List?users?=?userRepository.findByPriceBetween(12.3,13);
//????????for?(int?i?=?0;?i?
//????????????System.out.println(users.get(i));
//????????}
????????//查詢12.3之前的
//????????List?users?=?userRepository.findByPriceBefore(12.3);
//????????System.out.println(users);
????????List?users?=?userService.findByPriceBetween(12.3,0);
????????for?(User?u?:users)?{
????????????System.out.println(u);
????????}
????}
????//自定義查詢之分頁查詢
????@Test
????public?void?queryByPages(){
????????//創(chuàng)建構(gòu)建器
????????NativeSearchQueryBuilder?queryBuilder?=?new?NativeSearchQueryBuilder();
????????//添加基本分詞查詢,fuzzyQuery模糊查詢
????????queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName",?"羽"));
????????//?分頁:
????????int?page?=?1;
????????int?size?=?2;
????????queryBuilder.withPageable(PageRequest.of(page,size));
????????Page?users?=?userRepository.search(queryBuilder.build());
????????System.out.println("總條數(shù)是:"+users.getTotalElements());
????????System.out.println("總頁數(shù)是:"+users.getTotalPages());
????????System.out.println("當前頁是:"+users.getNumber());
????????System.out.println("每一頁的數(shù)量是"+users.getSize());
????????for?(User?user:users)?{
????????????System.out.println(user);
????????}
????}
????//查詢排序
????@Test
????public?void?searchAndSort(){
????????//構(gòu)建查詢
????????NativeSearchQueryBuilder?queryBuilder?=?new?NativeSearchQueryBuilder();
????????//模糊查詢
????????queryBuilder.withQuery(QueryBuilders.fuzzyQuery("userName",?"羽"));
????????//構(gòu)建排序
????????queryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));
????????Page?users?=?userRepository.search(queryBuilder.build());
????????for?(User?user:users)?{
????????????System.out.println(user);
????????}
????} 結(jié)語
本篇關(guān)于ElasticSearch的介紹就先到這里結(jié)束了,后續(xù)會出更多關(guān)于ElasticSearch系列更多文章,謝謝大家支持!


近期精彩內(nèi)容推薦:??
評論
圖片
表情


