基本环境信息
操作系统:macOS Catalina 10.15.3
JDK版本:1.8
ES版本:7.6
kibana版本:6.8
需要注意的是,ES7.6版本默认指定的是jdk11,这里因为我安装的是jdk8,就手工配置勉强使用。
1.下载
下载以上内容就不再赘述了,网上很多资源,如果你安装了brew,可以直接安装:
brew install elasticsearch
brew install kibana
ES可能下载慢一些,可以在网上找找国内网盘的版本。
2.配置ES
1.首先配置一下ES的启动脚本,解决一下我们JDK版本问题,路径在:
你的ES根目录/bin/elasticsearch
编辑这个elasticsearch脚本,在开头加上:
#使用本机的jdk
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
#添加jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java"
else
JAVA=`which java`
fi
注意图里制定的两个路径,是我本机JAVA安装的路径,如果你不知道你的JAVA安装在哪里,可以在终端执行以下命令查询:
/usr/libexec/java_home -V
2.接下来,如果你和我一样,下载的是linux版本,或者在启动时遇到了“not supported”异常,请打开并编辑以下文件:
你的ES根目录/config/elasticsearch.yml
在结尾添加一行
xpack.ml.enabled: false
3.最后,由于ES启动时要操作日志,但是在MacOS下默认日志文件夹是没有操作权限的,路径在
你的ES根目录/logs
我们手工修改下logs文件夹权限:
sudo chmod -R 777 logs
至此,你的ES应该就可以正常启动了。
3.启动ES
在你的ES根目录下,执行bin/elasticsearch,你的ES就可以正常启动了,启动以后,我们在浏览器访问:
http://localhost:9200 会看到一组JSON串,里面是一些版本信息,这就证明你启动成功了。
4.启动kibana
如果你和我一样,是用brew安装的kibana,那你直接终端运行
kibana
你的kibana就会跑起来。
kibana是一个图形化界面帮助我们操作ES的软件。尽管ES提供了REST API,但对于我们手工查询,或者联系来说,仍不够方便。成功运行kibana以后,我们在浏览器访问
http://localhost:5601 就可以看到kibana的首页:
第一次使用我们只需要关心左侧的Dev tools就行了,点击,会看到一个允许我们输入请求内容的界面:
我们在左侧输入请求内容,右侧就会显示我们请求的结果。
5.简单的增删改查
下面我们简单了解下ES的一些基本概念:
索引:可以理解成类似关系型库里的database概念,一个索引里的内容,往往都是有关系的一组内容。
类型:这个已经被弃用了,现在一个索引里只能有一个类型:_doc
文档:有点类似我们关系型数据库里的一条记录,不同的是,文档是json形式的,同一个索引里有多个文档,这些文档可以有不同的字段,但是我们建议同一个索引里的文档的字段保持一致。
下面我们尝试向ES中写入一条数据:
PUT /animal
并点击旁边的小三角执行,看到右侧的acknowledged为true,我就证明我们成功的写入了一条索引:animal
我们继续写入数据:
PUT /animal/_doc/1
{
"name":"熊猫",
"weight":"500kg",
"zoo":"北京动物园"
}
这样,我们就成功写入了一个文档,animal是文档的所在索引,_doc是类型,1是我们手工指定id,如果不指定,那就要用POST方法,ES会为我们自动分配。
接下来我们尝试获取我们这条文档:
GET /animal/_doc/1
我们主要关注右侧_source里的内容,它是我们文档存储的内容,其他的字段是一些文档的元信息:
_index 文档所属索引名称
_type 文档所属类型名
_id 文档唯一 ID
_score 文档相关性打分
_source 文档 JSON 数据
_version 文档版本信息
如果我们不需要这个文档了,可以直接DELETE它:
DELETE /animal/_doc/1
下面,为了我们尝试下使用ES进行简单的搜索,首先,我们要添加一些数据进去供我们使用:
PUT /animal/_doc/1
{
"name":"熊猫100",
"weight":"500kg",
"zoo":"北京动物园"
}
PUT /animal/_doc/2
{
"name":"老虎100",
"weight":"300kg",
"zoo":"北京动物园"
}
PUT /animal/_doc/3
{
"name":"狮子100",
"weight":"500kg",
"zoo":"上海动物园"
}
PUT /animal/_doc/4
{
"name":"孔雀100",
"weight":"100kg",
"zoo":"南京动物园"
}
PUT /animal/_doc/5
{
"name":"鳄鱼100",
"weight":"400kg",
"zoo":"河北动物园"
}
接下来,我们尝试简单的查询,我们在要查询的范围结尾加上“_search”进行查询:
GET animal/_search
{
"query":{
"query_string":{
"query":"老虎"
}
}
}
这样,我们就能查到老虎的结果,接下来我们尝试下查询体重100的动物:
GET animal/_search
{
"query":{
"query_string":{
"query":"100"
}
}
}
我们会发现,查询结果有很多不相关的记录,这是因为动物的名字里都带有100,而我们没有指定字段,下面我们指定字段查询:
GET animal/_search
{
"query":{
"query_string":{
"query":"100kg",
"fields": ["weight"]
}
}
}
这样就得到了预期结果。
ES的查询语言称为DSL,还有很多其他的强大功能,如分词,过滤等等,此处不再赘述。
至此我们完成了在Mac上搭建并简单使用ES+Kibana。