李鸿星电子商务网站建设,长沙做网站设计公司,自己做的网站怎么嵌入高德地图,网络广告策划书模板文章目录一、Elasticsearch的介绍1、Elasticsearch索引2、Elasticsearch的介绍二、Elasticsearch的安装1、安装ES服务2、安装kibana3、Docker安装ES4、Docker安装Kibana三、ES的常用操作1、索引操作2、文档操作3、域的属性3.1 index3.2 type3.3 store总结一、Elasticsearch的介…
文章目录一、Elasticsearch的介绍1、Elasticsearch索引2、Elasticsearch的介绍二、Elasticsearch的安装1、安装ES服务2、安装kibana3、Docker安装ES4、Docker安装Kibana三、ES的常用操作1、索引操作2、文档操作3、域的属性3.1 index3.2 type3.3 store总结一、Elasticsearch的介绍
1、Elasticsearch索引
Elasticsearch是一个全文检索服务器全文检索是一种非结构化数据的搜索方式。 结构化数据指具有固定长度的数据如数据库中的字段。 非结构化数据指格式和长度不固定的数据。 结构化数据一般存入数据库使用sql语句即可快速查询。但由于非结构化数据量大且格式不固定需要采用全文检索的方式进行搜索。全文检索通过建立倒排索引加快搜索效率。索引将数据中的一部分信息提取出来重新组织成一定的数据结构可以根据该结构进行快速搜索这样的结构称之为索引。索引分为正排索引和倒排索引。 正排索引正向索引将文档id建立为索引通过id可以快速查找数据。如数据库的主键就是创建的正排索引。 倒排索引反向索引非结构化数据中往往会根据关键词查询数据。此时将数据中的关键词建立为索引指向文档数据这样的数据称为倒排索引。
2、Elasticsearch的介绍
Elasticsearch是基于Lucene开发的项目本质是一个Java语言开发的web项目。 可以通过RESTful风格的接口访问该项目内部的Lucene从而让全文搜索变得简单。ES内部包含了Lucene。Elasticsearch自身带有分布式协调管理功能solr利用zookeeper进行分布式管理。 Elasticsearch仅支持json文件格式solr支持很多格式的数据。 Elasticsearch本身更注重于核心功能高级功能多由第三方插件提供solr官方提供的功能更多。 solr在传统的搜索应用中表现好于Elasticsearch但在处理实时搜索应用时即边添加边搜索效率明显低于Elasticsearch。 目前ES市场占有率越来越高solr已经停止维护。文档(Document)是可被查询的最小数据单元一个文档就是一条数据。类似于关系型数据库中的记录的概念。 类型(Type)具有一组共同字段的文档定义成一个类型类似于关系型数据库中的数据表的概念。 索引(Index)是多种类型文档的集合类似于关系型数据库中库的概念。 域(Field)文档由多个域组成类似于关系型数据库中的字段的概念。 ES7.X之后删除了Type的概念一个索引不会代表一个库而是代表一张表。 即原本对应表概念的Type没有了使用Index代替对应表概念同时删除了ES中相当于关系型数据库的库的概念。
二、Elasticsearch的安装
1、安装ES服务
准备一个CentOS7系统的虚拟机使用MobaX终端连接虚拟机。关闭防火墙systemctl stop firewalld.service 禁止防火墙自启动systemctl disable firewalld.service配置最大可创建文件数大小 1打开系统文件vim /etc/sysctl.conf 2添加一下配置vm.max_map_count655360保存退出 3在命令行使配置生效sysctl -p因为ES不能以root用户运行需要创建一个非root用户esuseradd es在官网下载linux的Elasticsearch压缩包https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.6.1-linux-x86_64.tar.gz通过mobax上传到目录/中然后解压缩tar -zxvf elasticsearch-8.6.1-linux-x86_64.tar.gz重命名ES文件mv elasticsearch-8.6.1 elasticsearch将ES文件移动到目录/usr/local/中mv elasticsearch /usr/local/让es用户取得该文件夹权限chown -R es:es /usr/local/elasticsearch切换为es用户su es找到/usr/local/elasticsearch/config/目录下面的elasticsearch.yml配置文件把安全认证开关从原先的true都改成false即可实现免密登录访问进入到目录/usr/local/elasticsearch/bincd /usr/local/elasticsearch/bin启动es服务./elasticsearch新开一个窗口查询es服务是否启动成功curl 127.0.0.1:9200此时{}内有数据即非Empty时证明启动成功
2、安装kibana
在Elasticsearch官网下载linux版的kibanahttps://artifacts.elastic.co/downloads/kibana/kibana-8.6.1-linux-x86_64.tar.gz在目录/中上传该压缩包然后在目录/下解压缩到目录/usr/local/中tar -zxvf kibana-8.6.1-linux-x86_64.tar.gz -C /usr/local/修改配置文件 1进入到config目录下cd /usr/local/kibana-8.6.1/config 2修改配置文件vim kibana.yml 3添加kibana主机ipserver.host: 192.168.126.24 添加Elasticsearch路径elasticsearch.hosts: [http://127.0.0.1:9200]给es用户设置kibana目录权限chown -R es:es /usr/local/kibana-8.6.1/切换到es用户su es进入到kibana的bin目录cd /usr/local/kibana-8.6.1/bin/确保启动Elasticsearch后再启动kibana./kibana在浏览器中访问kibanahttp://192.168.126.24:5601/ 如果google浏览器版本太低的话是访问不到这个页面的在kibana页面中选择Management再选择Index Management即可查看Elasticsearch索引信息
3、Docker安装ES
安装dockercurl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 重复了2次命令第一次显示获取密钥失败第二次才安装成功启动docker systemctl start docker拉取ES镜像docker pull elasticsearch:8.6.1docker容器间建立通信docker network create elastic创建ES容器docker run --restartalways -p 9200:9200 -p 9300:9300 -e discovery.typesingle-node -e ES_JAVA_OPTS-Xms512m -Xmx512m --nameelasticsearch --net elastic --cpuset-cpus1 -m 1G -d elasticsearch:8.6.1 参数 -p第一个-p是外部访问时的端口号第二个-p是ES集群内部通信的端口号 -e第一个-e是指ES是单节点的第二个-e是指该ES在JAVA中占用的内存为固定内存512M –name指该容量的名字 –net指使用的网关 –cpuset-cpus指使用多少个cpu -m占用的内存 -d指被使用的镜像名字修改配置文件(设置免密码登录) 1将ES容器中的elasticsearch.yml拷贝到当前目录下docker cp elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml . 因为相对路径显示找不到文件此时用的是绝对路径 2修改yml文件vim elasticsearch.yml将所有的true改为false即可 3将修改后的配置文件拷贝回容器中docker cp elasticsearch.yml elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml 4重启elasticsearch容器docker restart elasticsearch
4、Docker安装Kibana
拉取kibana镜像docker pull kibana:8.6.1启动容器docker run --name kibana --net elastic --link elasticsearch:elasticsearch -p 5601:5601 -d kibana:8.6.1在浏览器中访问kibana192.168.126.24:5601
三、ES的常用操作
1、索引操作
Elasticsearch是使用RESTful风格的http请求访问操作的请求参数和返回值都是json格式可以使用kibana发送http请求操作ES。 1选择Management下的DevTools即可通过kibana来操作ES
2在IndexManagement中查看索引 创建索引在kibana中输入下面内容并运行即可创建student索引 PUT /student
{mappings: {properties: {id: {type: integer},name: {type: text},age: {type: integer}}}
} 即创建student索引并添加索引的结构 删除索引在kibana中输入下面内容并运行即可删除student索引 DELETE /student2、文档操作 新增或修改文档 POST /student/_doc/1
{id:1,name:zzx,age:10}此时文档id设置为1如果不写id则自动生成文档idid和已有id重复时修改文档 根据文档id查询文档 GET /student/_doc/1根据id删除文档 DELETE /student/_doc/1根据id批量查询文档 GET /student/_mget
{docs:[{_id:1},{_id:2}]
}查询所有文档 GET /student/_search
{query:{match_all:{}}
}修改文档 POST /student/_doc/1
{id: 3,name: zzx,age: 10
} Elasticsearch执行删除操作时ES先标记文档为deleted状态而不是直接物理删除。当ES存储空间不足或者工作空闲时才会执行物理删除。 Elasticsearch执行修改操作时ES不会真的修改Document中的数据而是标记ES中原有的文档为deleted状态再创建一个新的文档来存储数据。
3、域的属性
3.1 index
只有域中的index的值为true时才能根据该域的关键词查询文档。 创建两个索引其中一个索引的域中的index值为true另一个为false。 PUT /student1
{mappings: {properties: {name: {type: text,index:true}}}
}
PUT /student2
{mappings: {properties: {name: {type: text,index:false}}}
}创建2个域的值相同的文档 POST /student1/_doc/1
{name:zzx 111
}
POST /student2/_doc/1
{name:zzx 111
}在这两个文档中都按name域查找 GET /student1/_search
{query:{term:{name: zzx}}
}
GET /student2/_search
{query:{term:{name: zzx}}
}此时student1的name域的index为true能找到但是student2是false直接报错。并且按域查找时text类型是以空格符为分割符即如果是zz的话也是找不到。
3.2 type
字符串类型text整数类型longintegershortbyte浮点型double,float日期类型date布尔类型boolean数组类型array对象类型object不分词的字符串keyword 1创建一个student3 PUT /student3{mappings: {properties: {name: {type: keyword,index:true}}}}2进行查询 GET /student3/_search{query:{term:{name: zzx}}}
此时因为keyword类型是不分词的所以找不到
3.3 store
域中store的值为true则为单独存储即该域能够单独查询。 创建2个索引 PUT /student1
{mappings: {properties: {age: {type:integer},name: {type: text,index:true,store: true}}}
}
PUT /student2
{mappings: {properties: {age: {type:integer},name: {type: text,index:true,store: false}}}
}给俩个索引赋值 POST /student1/_doc/1
{age:11,name:zzx 111
}
POST /student2/_doc/1
{age:11,name:zzx 111
}分别按域单独查找 GET /student1/_search
{stored_fields:[name]
}
GET /student2/_search
{stored_fields:[name]
}其中student1的store值为truestudent2为false索引student1单独查找时能找到域值而索引student2单独查找时没有找到域值。
总结
Elasticsearch是一个全文检索服务器全文检索是一种非结构化数据的搜索方式。 全文检索通过建立倒排索引加快搜索效率。 docker安装ES及Kibana拉取ES镜像后创建ES通信用的网关创建ES容器将配置文件修改为免密码登录即可拉取Kibana镜像后创建Kibana容器后即可通过Kibana访问ES服务。 在使用docker的cp指令时遇到一个问题就是不能通过相对路径找到文件而是用绝对路径才能找到文件。ES在执行删除和修改操作时不会马上删除而是先标记为deleted状态在内存不足或工作空闲时才会执行物理删除操作。index为true时在查询文档时可以根据域值查找文档。 store为true时将该域进行单独存储可以按域名单独查询到。