ElasticSearch

一、直接在虛擬機(jī)中搭建 elasticsearch 環(huán)境

1.運(yùn)行需要 JAVA 環(huán)境

2.elasticsearch 下載地址

https://www.elastic.co/cn/downloads/past-releases#elasticsearch

問題1: 下載后解壓可能起不來:注意兩點(diǎn),1.不要用root用戶啟動,2.不要放在root家目錄下面
創(chuàng)建elsearch用戶組及elsearch用戶:

groupadd elsearch
useradd elsearch -g elsearch
passwd elsearch
更改elasticsearch文件夾及內(nèi)部文件的所屬用戶及組為elsearch:elsearch

cd /opt
chown -R elsearch:elsearch elasticsearch-6.8.8
切換到elsearch用戶再啟動

su elsearch
cd /opt/elasticsearch-6.8.8/bin
./elasticsearch

問題2: 每個進(jìn)程最大同時打開文件數(shù)太小
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
修改 /etc/security/limits.conf

*               soft    nofile          65536
*               hard    nofile          65536
*               soft    nproc           4096
*               hard    nproc           4096

執(zhí)行命令 sysctl -p 生效

問題3: elasticsearch用戶擁有的內(nèi)存權(quán)限太小,至少需要262144
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
執(zhí)行命令:
sysctl -w vm.max_map_count=262144
或修改 /etc/sysctl.conf
vm.max_map_count=262144

問題4: 外部瀏覽器無法訪問
修改配置文件 elaticsearch.yml 里面的
network 0.0.0.0

上面問題都解決了再次啟動,并驗(yàn)證是否啟動成功
查看es健康狀態(tài):
curl http://localhost:9200/_cat/health?v
在瀏覽器上輸入
ip:9200 查看是否有json串出來

3.kibana

https://www.elastic.co/cn/downloads/past-releases/kibana-6-8-8
修改kibana.yml配置,讓其找到es的地址
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

啟動
cd bin
nohup ./kibana &

4.分詞

有兩種下載安裝方式

  • 使用插件命令下載

cd /opt/elasticsearch-6.8.8/bin
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.8/elasticsearch-analysis-ik-6.8.8.zip

  • 手動下載拷貝

https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.8.8
下載elasticsearch-analysis-ik-6.8.8.zip包,在win下解壓zip包
cd /opt/elasticsearch-6.8.8/plugins
mkdir ik
把win解壓的zip里面內(nèi)容 拷貝到 ik目錄下
重啟 elasticsearch


二、在docker中搭建 elasticsearch 環(huán)境

先在虛擬機(jī)中安裝docker,參見docker教程:
出現(xiàn) docker0: iptables: No chain/target/match by that name 錯誤
解決:重啟docker
service docker restart

docker 下載鏡像倉庫地址:https://hub.docker.com/

1.安裝 elasticsearch

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.8

2.啟動es容器

寫個啟動esRun.sh的啟動腳本內(nèi)容如下:

docker run -itd  --name elasticsearch -v /docker/esdata:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.8.8

說明幾點(diǎn)
不要加 -rm 參數(shù) 這樣重啟后該容器會刪除,在里面裝的分詞插件就沒有了
加 -v /docker/esdata:/usr/share/elasticsearch/data 把容器里的數(shù)據(jù)映射到本地這樣可以寫到磁盤永久保存,另外esdata權(quán)限改成777

在瀏覽器中輸入: 虛擬機(jī)ip:9200 驗(yàn)證,有json串返回說明啟動成功

3.進(jìn)入到es容器中安裝ik分詞器插件

docker exec -it elasticsearch /bin/bash
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.8/elasticsearch-analysis-ik-6.8.8.zip

4.修改配置,解決跨域訪問問題

首先進(jìn)入到容器中,然后進(jìn)入到指定目錄修改elasticsearch.yml文件。

docker exec -it elasticsearch /bin/bash
cd /usr/share/elasticsearch/config/
vi elasticsearch.yml

在elasticsearch.yml的文件末尾加上:

http.cors.enabled: true
http.cors.allow-origin: "*"

修改配置后重啟容器即可。

docker restart elasticsearch

5.安裝 kibana

docker pull kibana:6.8.8

6.連接es并啟動

寫個kibanaRun.sh腳本內(nèi)容如下:

docker run -itd --rm --name kibana --link=elasticsearch:test  -p 5601:5601 kibana:6.8.8 && docker start kibana

在瀏覽器中輸入: 虛擬機(jī)ip:5601 驗(yàn)證,出現(xiàn)kibana界面

問題1:
docker : 報(bào)錯 WARNING: IPv4 forwarding is disabled. Networking will not work.
解決方法:

vi /usr/lib/sysctl.d/00-system.conf
添加如下代碼:
net.ipv4.ip_forward=1
重啟network服務(wù)
systemctl restart network

三、elasticsearch

  1. 新建一個索引(類似mysql新建一個數(shù)據(jù)庫實(shí)例),在kibana Dev Tools 里面操作
    PUT 索引名

查看現(xiàn)有的索引
http://192.168.121.223:9200/_cat/indices?v

  1. 創(chuàng)建表并插入一條數(shù)據(jù)
PUT my_indnx/moive/2
{
  "moive_name": "red event",
  "price":120,
  "time":"2018-11-10",
  "actors":[
    {"name": "zhaosi", "age":33, "sex":1},
    {"name": "achen", "age":43,"sex":1},
    {"name": "wangwu","age":23,"sex":2}
  ]
}
  1. 簡單的查詢
    查所有
GET my_indnx/moive/_search

匹配查詢

GET my_indnx/moive/_search
{
  "query": {
    "match": {
      "moive_name": "red event"
    }
  }
}
  1. 刪除一條數(shù)據(jù)
DELETE my_indnx/moive/2
  1. 修改一條數(shù)據(jù),與插入一條數(shù)據(jù)一樣直接改里面的值即可,不用改的字段和數(shù)據(jù)也要帶上否則那些字段會被刪掉
PUT my_indnx/moive/2
{
  "moive_name": "red event",
  "price":333,
  "time":"2018-11-10",
  "actors":[
    {"name": "zhaosi", "age":33, "sex":1},
    {"name": "achen", "age":43,"sex":1},
    {"name": "wangwu","age":23,"sex":2}
  ]
}

在Elaticsearch 6.x版本中已經(jīng)只允許一個索引下只有一個type,聲明多個type已經(jīng)標(biāo)記為過期

復(fù)合查詢

GET my_indnx_2/moive_2/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "moive_name": "行動"
        }}
      ], 
      "filter":{
        "term": {
          "moive_gsid": "3"
        }
      }
    }
  }
}

在新建index下的type表結(jié)構(gòu)時,指定將來可能使用分詞器的字段
ik分詞器主要有兩個
ik_smart:簡單分詞器,將以最小的組合拆分中文
ik_max_word:最大化分詞器,將以最大化結(jié)果分詞

GET _analyze 
{
  "text": "我是中國人",
  "analyzer": "ik_max_word"
}

四、springboot 與 elasticsearch 整合

一般來說有兩種方式:

  1. Jest(默認(rèn)不生效,需要下載依賴包)

添加依賴

<dependency>
    <groupId>io.searchbox</groupId>
    <artifactId>jest</artifactId>
    <version>6.3.1</version>
</dependency>
  1. spring data (創(chuàng)建項(xiàng)目勾選了 NoSQL中的elasticsearch會自動添加依賴)

ElasticsearchRepository 和 ElasticsearchTemplate 兩種

添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

jest 這種方式的查詢需要拼json的查詢語句,不是很方便

ElasticsearchRepository 可以做Elasticsearch的相關(guān)增刪改查,用法和普通的CRUDRepository是一樣的,
這樣就能統(tǒng)一ElasticSearch和普通的JPA操作,獲得和操作mysql一樣的代碼體驗(yàn)。但是同時可以看到
ElasticsearchRepository的功能是比較少的,簡單查詢夠用。

ElasticsearchTemplate 則提供了更多的方法來完成更多的功能,也包括分頁之類的,他其實(shí)就是一個封裝
好的ElasticSearch Util功能類,通過直接連接client來完成數(shù)據(jù)的操作。

使用 ElasticsearchRepository 查詢的時候報(bào)
ElasticsearchException:failed to map source [xxx to class Book] with root cause 錯誤
原因:
這是因?yàn)樵趯?shí)體類Book中為了方便實(shí)例化添加了一個有參構(gòu)造函數(shù),導(dǎo)致JVM不能添加默認(rèn)的無參構(gòu)造函數(shù)了,但是jackson的反序列化需要使用無參構(gòu)造函數(shù),所以報(bào)錯!
解決:
在實(shí)體類Book中添加一個無參構(gòu)造函數(shù)就可以了!
或者不寫構(gòu)造函數(shù)直接添加兩個注解 @NoArgsConstructor @AllArgsConstructor

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容