擼一門技術,必先登其官網,扒其皮,喝其血html
官網地址:www.elastic.co/products/el…java
官方中文文檔地址:www.elastic.co/guide/cn/el…node
ElasticSearch
是一個分佈式搜索服務,提供的是一組Restful API
,底層基於Lucene
,採用多shard
(分片)的方式保證數據安全,而且提供自動resharding的功能。是目前全文搜索引擎的首選,能夠快速的存儲、搜索和分析海量數據,Springboot
經過整合Spring Data ElasticSearch
爲咱們提供了很是方便的檢索功能支持。linux
tar -zxvf elasticsearch-6.6.0.tar.gz -C /opt/module/ # 解壓安裝包
複製代碼
[root@localhost elasticsearch-6.6.0]# mkdir data # 建立數據文件夾(6.0自帶logs文件夾)
複製代碼
vi elasticsearch.yml # 修改配置文件
複製代碼
cluster.name: my-application # 集羣名稱(多集羣時候只需節點名稱一直便可)
node.name: node-102 # 節點名稱
path.data: /opt/module/elasticsearch-6.6.0/data # 數據路徑
path.logs: /opt/module/elasticsearch-6.6.0/logs # 日誌路徑
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 192.168.1.8 # 網絡地址
http.port: 9200 # 端口
discovery.zen.ping.unicast.hosts: ["hadoop102"] # 主機名
複製代碼
注意:node.name能夠隨便取,可是一個集羣中不能重複,注意path.data前不能有空格,冒號後必須有一個空格git
問題一:ERROR: bootstrap checks failed
github
su root
vi /etc/security/limits.conf
複製代碼
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
複製代碼
問題二:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
spring
vi /etc/security/limits.d/90-nproc.conf
* soft nproc 2048
複製代碼
問題三:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
sql
vi /etc/sysctl.conf
vm.max_map_count=655360
sysctl -p
複製代碼
elasticsearch禁止使用root用戶啓動,須要新建一個testuser用戶docker
[testuser@hadoop102 elasticsearch-6.6.0]$ ./bin/elasticsearch
複製代碼
**訪問地址:**http://192.168.1.8:9200/數據庫
tar -zxvf node-v10.15.1-linux-x64.tar.gz -C /opt/module/
複製代碼
vi /etc/profile
export NODE_HOME=/opt/module/node-v10.15.1-linux-x64
export PATH=$PATH:$NODE_HOME/bin
source /etc/profile
複製代碼
[root@hadoop102 sortware]# unzip elasticsearch-head-master.zip -d /opt/module/
複製代碼
[root@hadoop102 elasticsearch-head-master]# npm install grunt --save
複製代碼
npm install -g cnpm --registry=https://registry.npm.taobao.org
複製代碼
npm install -g grunt-cli
複製代碼
vim Gruntfile.js
複製代碼
options: {
hostname:'0.0.0.0',
port: 9100,
base: '.',
keepalive: true
}
複製代碼
# 檢查head根目錄下是否存在base文件夾 沒有:將 _site下的base文件夾及其內容複製到head根目錄下
mkdir base
cp base/* ../base/
複製代碼
[root@hadoop102 module]# chown -R luokangyuan:luokangyuan elasticsearch-head-master/
複製代碼
[luokangyuan@hadoop102 elasticsearch-head-master]$ grunt server -d
複製代碼
npm install grunt-contrib-clean -registry=https://registry.npm.taobao.org
npm install grunt-contrib-concat -registry=https://registry.npm.taobao.org
npm install grunt-contrib-watch -registry=https://registry.npm.taobao.org
npm install grunt-contrib-connect -registry=https://registry.npm.taobao.org
npm install grunt-contrib-copy -registry=https://registry.npm.taobao.org
npm install grunt-contrib-jasmine -registry=https://registry.npm.taobao.org
複製代碼
http://192.168.1.8:9100/
複製代碼
vi elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
複製代碼
[root@localhost /]# systemctl start docker
複製代碼
[root@localhost /]# docker search elasticsearch
複製代碼
[root@localhost /]# docker pull registry.docker-cn.com/library/elasticsearch
複製代碼
[root@localhost /]# docker images
複製代碼
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name ES01 5acf0e8da90b
複製代碼
[root@localhost /]# docker ps
複製代碼
http://192.168.1.14:9200/
複製代碼
集羣就是包含了多個節點,每個節點屬於哪個集羣是經過一個集羣名稱配置。
集羣中的一個節點,節點也存在名稱,默認是隨機分配一個名稱,默認節點會加入到一個elasticsearch
集羣中。
索引包含的是一大推類似結構的文檔數據,例如咱們的商品索引,訂單索引等,類比於咱們的數據庫。
每個索引裏面能夠有一個或者多個type
,type
是index
中的一個邏輯數據分類,好比個人博客系統,一個索引,能夠定義用戶數據type
,能夠定義文章數據type
,也能夠定義評論數據type
,類比數據庫的表。
文檔是ElasticSearch
中最小的數據單元,一條Document
能夠是一條文章數據,一條用戶數據,一條評論數據,一般使用JSON
數據結構來表示,每一個index
下的type
中,存儲多個document
,類別數據庫中的行。
Field
是ElasticSearch
中的最小單位,一個document
裏面粗在多個Field
字段,每一個Field
就是一個數據字段,類比數據庫中的列。
數據如何存儲在索引上,須要一個約束配置,例如數據類型,是否存儲,查詢的時候是否分詞等等,類比數據庫彙總的約束。
關係型數據庫Mysql | 非關係型數據庫ElasticSearch |
---|---|
數據庫Database | 索引Index |
表Table | 類型Type |
數據行Row | 文檔Document |
數據列Column | 字段Field |
約束Schema | 映射Mapping |
Springboot
默認使用Spring Data Elasticsearch
模塊進行操做,同時也存在另一個操做ElasticSearch
的模塊,那就是jest
。
Jest的GitHub地址:github.com/searchbox-i…
Jest文檔地址:github.com/searchbox-i…
第一步:增長POM 文件
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>5.3.4</version>
</dependency>
複製代碼
第二步:增長ElasticSearch配置項
spring:
elasticsearch:
jest:
uris: http://192.168.1.9:9200/
複製代碼
第三步:使用JestClient進行交互
public class Users {
// 標示主鍵字段
@JestId
private Integer id;
private Integer code;
private String name;
private String sex;
private String age;
private String notes;
}
複製代碼
@Autowired
JestClient jestClient;
@Test
public void contextLoads() {
// 給es中保存一份文檔
Users users = new Users();
users.setId(2);
users.setCode(123456);
users.setAge("87");
users.setName("魯班七號");
users.setSex("男");
users.setNotes("王者峽谷人見人想揍的小魯班");
// 構建一個王者榮耀的索引和英雄角色類型
Index build = new Index.Builder(users).index("wzry").type("yxjs").build();
try {
jestClient.execute(build);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testSeach(){
// 測試搜索es中知足條件的數據
String json = "{\n" +
" \"query\" : {\n" +
" \"match\" : {\n" +
" \"notes\" : \"峽谷小人\"\n" +
" }\n" +
" }\n" +
"}";
Search build = new Search.Builder(json).addIndex("wzry").addType("yxjs").build();
try {
SearchResult execute = jestClient.execute(build);
System.out.println(execute.getJsonString());
} catch (IOException e) {
e.printStackTrace();
}
}
複製代碼
最後測試
http://192.168.1.9:9200/wzry/yxjs/2
複製代碼
官方文檔地址:docs.spring.io/spring-data…
第一步:增長POM文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
複製代碼
第二步:增長配置項
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 192.168.1.9:9300
repositories:
enabled: true
複製代碼
第三步:進行數據交互
@Document(indexName = "study", type = "book")
public class Book {
private Integer id;
private String name;
private String notes;
}
複製代碼
public interface BookRepository extends ElasticsearchRepository<Book, Integer> {
}
複製代碼
@Autowired
BookRepository bookRepository;
@Test
public void testSpringDataEs(){
Book book = new Book();
book.setId(11);
book.setName("一個陌生女人的來信");
book.setNotes("還不錯");
bookRepository.index(book);
}
複製代碼
注意:若是啓動報錯,多是spring data elasticsearch和elasticsearch存在版本對應關係
版本對應參考官方文檔:github.com/spring-proj…
spring data elasticsearch | elasticsearch |
---|---|
3.2.x | 6.5.0 |
3.1.x | 6.2.2 |
3.0.x | 5.5.0 |
2.1.x | 2.4.0 |
2.0.x | 2.2.0 |
1.3.x | 1.5.2 |
版本不適配解決方法
spring data elasticsearch
的版本號elasticsearch
便可elasticsearch
版本改變Springboot
版本解決辦法示例:
# 安裝對應版本的elasticsearch
[root@localhost /]# docker pull registry.docker-cn.com/library/elasticsearch:2.4
複製代碼
# 啓動對應版本的elasticsearch
[root@localhost /]# docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9200 -p 9301:9300 --name ES14 01e5bee1e059
複製代碼
我我的本次測試環境:
1.5.19
2.4
mkdir
建立文件夾pwd
查看當前所在路徑scp -r CentOS-7-x86_64-Minimal-1810.iso root@192.168.1.8:/opt/sortware
在當前文件上傳文件到指定服務器文件夾cat /etc/centos-release
查看系統版本rm -rf jdk-8u201-linux-i586.tar.gz
不提示的遞歸刪除文件或者文件夾tar -zxvf jdk-8u201-linux-x64.tar.gz
解壓hostnamectl
查看主機名whereis sudoers
查找文件位置ls -l /etc/sudoers
查看文件權限chmod -v u+w /etc/sudoers
加入可寫權限firewall-cmd --state
查看防火牆狀態systemctl stop firewalld.service
關閉防火牆1.上傳安裝文件
/opt/sortware/jdk-8u201-linux-x64.tar.gz
複製代碼
2.解壓
tar -zxvf jdk-8u201-linux-x64.tar.gz
複製代碼
3.重命名
mv jdk1.8.0_201 jdk1.8
複製代碼
4.打開系統配置文件
vi /etc/profile
複製代碼
5.添加環境變量
## Java
export JAVA_HOME=/opt/sortware/jdk1.8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
複製代碼
6.重啓配置文件
source /etc/profile
複製代碼
7.查看版本
java -version
複製代碼
刪除全部容器
docker rm `docker ps -a -q`
複製代碼
查看存在的鏡像
docker images
複製代碼
查看全部啓動的容器
docker ps -a
複製代碼
中止容器
docker stop
複製代碼
搜索倉庫
docker search elasticsearch
複製代碼
拉取倉庫
docker pull registry.docker-cn.com/library/elasticsearch
複製代碼