ElasticSearch

一、直接在虚拟机中搭建 elasticsearch 环境

1.运行需要 JAVA 环境

2.elasticsearch 下载地址

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

问题1: 下载后解压可能起不来:注意两点,1.不要用root用户启动,2.不要放在root家目录下面
创建elsearch用户组及elsearch用户:

groupadd elsearch
useradd elsearch -g elsearch
passwd elsearch
更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch

cd /opt
chown -R elsearch:elsearch elasticsearch-6.8.8
切换到elsearch用户再启动

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

问题2: 每个进程最大同时打开文件数太小
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

执行命令 sysctl -p 生效

问题3: elasticsearch用户拥有的内存权限太小,至少需要262144
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
执行命令:
sysctl -w vm.max_map_count=262144
或修改 /etc/sysctl.conf
vm.max_map_count=262144

问题4: 外部浏览器无法访问
修改配置文件 elaticsearch.yml 里面的
network 0.0.0.0

上面问题都解决了再次启动,并验证是否启动成功
查看es健康状态:
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里面内容 拷贝到 ik目录下
重启 elasticsearch


二、在docker中搭建 elasticsearch 环境

先在虚拟机中安装docker,参见docker教程:
出现 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的启动脚本内容如下:

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

说明几点
不要加 -rm 参数 这样重启后该容器会删除,在里面装的分词插件就没有了
加 -v /docker/esdata:/usr/share/elasticsearch/data 把容器里的数据映射到本地这样可以写到磁盘永久保存,另外esdata权限改成777

在浏览器中输入: 虚拟机ip:9200 验证,有json串返回说明启动成功

3.进入到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.修改配置,解决跨域访问问题

首先进入到容器中,然后进入到指定目录修改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脚本内容如下:

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

在浏览器中输入: 虚拟机ip:5601 验证,出现kibana界面

问题1:
docker : 报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
解决方法:

vi /usr/lib/sysctl.d/00-system.conf
添加如下代码:
net.ipv4.ip_forward=1
重启network服务
systemctl restart network

三、elasticsearch

  1. 新建一个索引(类似mysql新建一个数据库实例),在kibana Dev Tools 里面操作
    PUT 索引名

查看现有的索引
http://192.168.121.223:9200/_cat/indices?v

  1. 创建表并插入一条数据
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. 删除一条数据
DELETE my_indnx/moive/2
  1. 修改一条数据,与插入一条数据一样直接改里面的值即可,不用改的字段和数据也要带上否则那些字段会被删掉
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版本中已经只允许一个索引下只有一个type,声明多个type已经标记为过期

复合查询

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

在新建index下的type表结构时,指定将来可能使用分词器的字段
ik分词器主要有两个
ik_smart:简单分词器,将以最小的组合拆分中文
ik_max_word:最大化分词器,将以最大化结果分词

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

四、springboot 与 elasticsearch 整合

一般来说有两种方式:

  1. Jest(默认不生效,需要下载依赖包)

添加依赖

<dependency>
    <groupId>io.searchbox</groupId>
    <artifactId>jest</artifactId>
    <version>6.3.1</version>
</dependency>
  1. spring data (创建项目勾选了 NoSQL中的elasticsearch会自动添加依赖)

ElasticsearchRepository 和 ElasticsearchTemplate 两种

添加依赖

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

jest 这种方式的查询需要拼json的查询语句,不是很方便

ElasticsearchRepository 可以做Elasticsearch的相关增删改查,用法和普通的CRUDRepository是一样的,
这样就能统一ElasticSearch和普通的JPA操作,获得和操作mysql一样的代码体验。但是同时可以看到
ElasticsearchRepository的功能是比较少的,简单查询够用。

ElasticsearchTemplate 则提供了更多的方法来完成更多的功能,也包括分页之类的,他其实就是一个封装
好的ElasticSearch Util功能类,通过直接连接client来完成数据的操作。

使用 ElasticsearchRepository 查询的时候报
ElasticsearchException:failed to map source [xxx to class Book] with root cause 错误
原因:
这是因为在实体类Book中为了方便实例化添加了一个有参构造函数,导致JVM不能添加默认的无参构造函数了,但是jackson的反序列化需要使用无参构造函数,所以报错!
解决:
在实体类Book中添加一个无参构造函数就可以了!
或者不写构造函数直接添加两个注解 @NoArgsConstructor @AllArgsConstructor

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343