Elasticsearch安装教程
官网;
分词插件;
本地离线文件:\qzdoc\DevSoft\elasticsearch
A. 安装步骤
A1、JDK jdk-8u77-windows-x64
A2、配置系统环境变量 JAVA_HOME 为 C:\Program Files\Java\jdk1.8.0_77 (如果不是安装在C盘,盘符请注意更改)
A3、解压 elasticsearch-2.3.1.zip ,用CMD命令行运行bin目录下面的 elasticsearch.bat
1. C:\Users\Administrator>cd E:\soft\elasticsearch\elasticsearch-2.3.1\elasticsearch-2.3.1\bin
2.
3. C:\Users\Administrator>E:
4.
5. E:\soft\elasticsearch\elasticsearch-2.3.1\elasticsearch-2.3.1\bin>dir
6. 驱动器 E 中的卷是 Elasticsearch
7. 卷的序列号是 CC79-9420
8.
9. E:\soft\elasticsearch\elasticsearch-2.3.1\elasticsearch-2.3.1\bin 的目录
10.
11. 2016/04/07 10:29 <DIR> .
12. 2016/04/07 10:29 <DIR> ..
13. 2016/04/04 12:23 5,551 elasticsearch
14. 2016/01/27 12:53 104,448 elasticsearch-service-mgr.exe
15. 2016/01/27 12:53 103,936 elasticsearch-service-x64.exe
16. 2016/01/27 12:53 80,896 elasticsearch-service-x86.exe
17. 2016/04/04 12:23 909 elasticsearch.bat
18. 2016/04/04 12:23 3,307 elasticsearch.in.bat
19. 2016/04/04 12:23 2,814 elasticsearch.in.sh
20. 2016/04/04 12:23 2,992 plugin
21. 2016/04/04 12:23 1,303 plugin.bat
22. 2016/04/04 12:23 6,501 service.bat
23. 10 个文件 312,657 字节
24. 2 个目录 135,808,548,864 可用字节
25.
26. E:\soft\elasticsearch\elasticsearch-2.3.1\elasticsearch-2.3.1\bin>elasticsearch.bat
27. [2016-04-07 11:21:12,101][INFO ][node ] [Hardcore] version[2.3.1], pid[944], build[bd98092/2016-04-0
28. 4T12:25:05Z]
29. [2016-04-07 11:21:12,101][INFO ][node ] [Hardcore] initializing ...
30. [2016-04-07 11:21:13,085][INFO ][plugins ] [Hardcore] modules [reindex, lang-expression, lang-groovy],
31. plugins [], sites []
32. [2016-04-07 11:21:13,132][INFO ][env ] [Hardcore] using [1] data paths, mounts [[Elasticsearch (E:)
33. ]], net usable_space [126.4gb], net total_space [126.8gb], spins? [unknown], types [NTFS]
34. [2016-04-07 11:21:13,132][INFO ][env ] [Hardcore] heap size [910.5mb], compressed ordinary object p
35. ointers [true]
36. [2016-04-07 11:21:16,351][INFO ][node ] [Hardcore] initialized
37. [2016-04-07 11:21:16,351][INFO ][node ] [Hardcore] starting ...
38. [2016-04-07 11:21:16,788][INFO ][transport ] [Hardcore] publish_address {127.0.0.1:9300}, bound_addresses
39. {127.0.0.1:9300}, {[::1]:9300}
40. [2016-04-07 11:21:16,804][INFO ][discovery ] [Hardcore] elasticsearch/QbxsMzlVQn64WMXmuzLWvA
41. [2016-04-07 11:21:20,883][INFO ][cluster.service ] [Hardcore] new_master {Hardcore}{QbxsMzlVQn64WMXmuzLWvA}{127
42. .0.0.1}{127.0.0.1:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
43. [2016-04-07 11:21:20,992][INFO ][gateway ] [Hardcore] recovered [0] indices into cluster_state
44. [2016-04-07 11:21:21,195][INFO ][http ] [Hardcore] publish_address {127.0.0.1:9200}, bound_addresses
45. {127.0.0.1:9200}, {[::1]:9200}
46. [2016-04-07 11:21:21,195][INFO ][node ] [Hardcore] started
A4、可以修改config下面的yml配置文件下的启动IP地址
A5、可以安装curl进行测试,
1. 解压curl-7.33.0-win64-ssl-sspi.zip到一个文件夹,设置系统环境变量 CURL_HOME E:\soft\elasticsearch\curl-7.33.0-win64-ssl-sspi (路径按照解压的路径)
2. 更改PAHT环境变量,加入%CURL_HOME%,记得和其他项分号隔开
3. win平台下的curl记得用双引号代替官方测试说明的单引号(天坑);或者不用引号;插入json数据时特殊字符要转义,如:curl -XPUT localhost:9200/customer/external/1?pretty -d "{\"name\":\"John Doe\"}"
A6、编译IK分词插件
A6a.安装 apache-maven-3.3.9-bin.zip 解压文件,配置系统环境变量 M2_HOME C:\JavaEnv\apache-maven-3.3.9(按安装目录不同而不同)
1. 更改PAHT环境变量,加入C:\JavaEnv\apache-maven-3.3.9\bin(按安装目录不同而不同),记得和其他项分号隔开
2. 利用 cmd 输入命令 mvn -v 测试
3.
4. C:\Users\Administrator>mvn -v
5. Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:4
6. 7+08:00)
7. Maven home: C:\JavaEnv\apache-maven-3.3.9
8. Java version: 1.8.0_77, vendor: Oracle Corporation
9. Java home: C:\Program Files\Java\jdk1.8.0_77\jre
10. Default locale: zh_CN, platform encoding: GBK
11. OS name: "windows server 2012 r2", version: "6.3", arch: "amd64", family: "dos"
A6b. 解压elasticsearch-analysis-ik-master.zip到目录
A6c. 命令行转到解压后的目录,分别执行,执行过程中需要联网下载很多POM
1. mvn clean
2. mvn compile
3. mvn package
4.
5. *compile*命令执行超久。。15分钟,操
6. [INFO] ------------------------------------------------------------------------
7. [INFO] BUILD SUCCESS
8. [INFO] ------------------------------------------------------------------------
9. [INFO] Total time: 15:48 min
10. [INFO] Finished at: 2016-04-07T14:18:10+08:00
11. [INFO] Final Memory: 24M/134M
12. [INFO] ------------------------------------------------------------------------
13.
14. 执行打包后,成功信息如下
15. [INFO] Building zip: E:\soft\elasticsearch\elasticsearch-analysis-ik-master\target\releases\elasticsearch-analysis-ik-1.9.0.zip
16. [INFO] ------------------------------------------------------------------------
17. [INFO] BUILD SUCCESS
18. [INFO] ------------------------------------------------------------------------
19. [INFO] Total time: 02:05 min
20. [INFO] Finished at: 2016-04-07T14:21:44+08:00
21. [INFO] Final Memory: 23M/365M
22. [INFO] ------------------------------------------------------------------------
A6d. 安装插件
将编译好的zip文件编译好复制到elasticsearch安装的根目录下/plugins/ik,然后重启elasticsearch服务
重启服务中出现异常说IK插件版本不对
1. PS E:\soft\elasticsearch\elasticsearch-2.3.1\bin> ./elasticsearch.bat
2. [2016-04-07 14:34:18,322][INFO ][node ] [Ogre] version[2.3.1], pid[4392], build[bd98092/2016-04-04T12:25:05Z]
3. [2016-04-07 14:34:18,322][INFO ][node ] [Ogre] initializing ...
4. Exception in thread "main" java.lang.IllegalArgumentException: Plugin [analysis-ik] is incompatible with Elasticsearch [2.3.1]. Was designed for version [2.3.0]
5. at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:118)
6. at org.elasticsearch.plugins.PluginsService.getPluginBundles(PluginsService.java:378)
7. at org.elasticsearch.plugins.PluginsService.<init>(PluginsService.java:128)
8. at org.elasticsearch.node.Node.<init>(Node.java:158)
9. at org.elasticsearch.node.Node.<init>(Node.java:140)
10. at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:143)
11. at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:178)
12. at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)
13. at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)
14. Refer to the log for complete error details.
修改plugin-descriptor.properties中的elasticsearch.version=2.3.0到2.3.1临时解决问题。。
等以后有新版本再更新好了
B. 概念
B1. node
1. 为集群节点, 一般情况下一个node为一个独立计算机的elasticsearch分布索引计算实例,
B2. shard
1. 为索引分片,默认为每个节点5个主要分配,一个索引可能分布在一个或者多个分片当中,有些分片可能在其他节点, 在机器数量(node)有限的情况下,shard并不是越多越好,并行搜索多个分片会带来更高的IO,合并搜索结果也会带来更高的CPU
B3.replica shards
1. 为复制分片,为了提高建立索引的速度,第一次增量的时候可以设置复制分片为0,增量完成后再设置复制分片为1
B4. 以windows 服务来运行 elasticsearch
1. 官网提供说明
2. c:\elasticsearch-{version}bin>service install
3. Installing service : "elasticsearch-service-x64"
4. Using JAVA_HOME (64-bit): "c:\jvm\jdk1.8"
5. The service 'elasticsearch-service-x64' has been installed.
6.
7. 还有java虚拟机运行内存要单独在 serivce.bat 中设置
8.
9. 打开管理UI
10. c:\elasticsearch-{version}bin>service manager
11.
12. 删除服务
13. c:\elasticsearch-{version}bin>service remove
C. 配置
C1. 内存
1. 配置文件在bin目录下的 elasticsearch.in.bat 文件中, ES_MIN_MEM 为最小内存 默认为256m, ES_MAX_MEM 为最大内存 默认为1g, elasticsearch 官方建议最小内存和最大内存设置为一样,可以提高性能
C2. 网络地址
1. 配置文件为config目录下的 elasticsearch.yml 设置 network.host=ip地址 http.port: 9200 这个是配置运行端口,默认9200超出我们服务器防火墙公开端口范围,需要注意修改
C3. 集群搭建
1. 在测试的时候并没有发现节点可以自动发现内网中的其他节点,不过手动配置后可以了
2. 配置文件位于config目录下的 elasticsearch.yml 配置为 discovery.zen.ping.unicast.hosts: ["192.168.2.217", "192.168.1.180"]
3. 一旦启动新节点,会自动复制选举城主节点后的索引数据,如果索引数据很多,这个过程应该会挺慢的
4. 测试中down调某个节点,不会影响索引读取,客户端组件会自动路由失败请求到正常服务器,关掉的节点启动后会自动同步新索引。
C4 注意事项
1. elasticsearch.yml 每一行配置(除了注释)前面必须有一个空格,那个空格不能删除,否则出问题
D. 测试
D1. curl 工具
可以使用 curl 进行测试,windows 下注意josn不能换行,还有不支持中文,可能默认传输GB2312的原因
windows 下可以用CMD命令执行curl, 注意使用双引号替代单引号,中间的双引号按反斜杠\转义,不支持换号
D1. Mapping
_id字段网上说可以 通过mapping映射为某个字段,实际上测试并不行, 可能早期的版本可以支持映射,但测试的
2.3.1版本并不行
但索引的model里可以设置一个ID标签映射
1. [Nest.ElasticsearchType(IdProperty = "oc_code")]
2. public class OrgCompanyCombine
D3. elasticsearch.net 客户端
客户端默认吞掉一般的异常,如要设置为抛出异常,需要设置 ConnectionSettings.ThrowExceptions(true);
还有未发现可以直接批量的更新操作方法
D4. 大坑
1、索引名称必须为小写
2、索引类型(实体名)必须小写
3、实体属性第一个字母必须是小写,否则会在mapping中自动出现一份新的字段
4、mapping 里的字段类型一旦有数据,基本不能修改,只能删除重建索引
5、mapping 里的类型可以单独新增
6、yml配置文件中某一行的配置文件必须前面必须留空格
7、单个实例配置的最大内存官方推荐不超过32GB,估计再大 java 的 GC 受不了,反而影响性能