Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,不管在开源仍是专有领域,Lucene 能够被认为是迄今为止最早进、性能最好的、功能最全的搜索引擎库。注意,Lucene 只是一个库。想要发挥其强大的做用,你需使用 Java 并要将其集成到你的应用中。mysql
Lucene 很是复杂,你须要深刻的了解检索相关知识来理解它是如何工做的,就跟学习 springmvc 以前先从 servlet 开始,繁琐复杂的工做,Solor、Elasticsearch 应由而生, 其使用 Java 编写并使用 Lucene 来创建索引并实现搜索功能,可是它的目的是经过简单连贯的 RESTful API 让全文搜索变得简单并隐藏 Lucene 的复杂性。nginx
重要特性:git
基本概念:github
索引(indices)-------------------Databases 数据库
类型(type)----------------------Table 数据表
文档(Document)---------------Row 行
字段(Field)---------------------Columns 列spring
详细说明:sql
概念 | 说明 |
---|---|
索引库(indices) | indices是index的复数,表明许多的索引, |
类型(type) | 类型是模拟mysql中的table概念,一个索引库下能够有不一样类型的索引,好比商品索引,订单索引,其数据格式不一样。不过这会致使索引库混乱,所以将来版本中会移除这个概念 |
文档(document) | 存入索引库原始的数据。好比每一条商品信息,就是一个文档 |
字段(field) | 文档中的属性 |
映射配置(mappings) | 字段的数据类型、属性、是否索引、是否存储等特性 |
要注意的是:Elasticsearch 自己就是分布式的,所以即使你只有一个节点,Elasticsearch 默认也会对你的数据进行分片和副本操做,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。数据库
以下主要针对 windows 环境下的 Elasticsearch 学习。apache
下载地址:https://www.elastic.co/cn/products/编程
解压后,进入 bin/ 目录,双击执行 elasticsearch .batjson
Elasticsearch 启动后能够看到绑定了两个端口:
9200,咱们能够经过浏览器直接访问,9300 则不能够直接访问。
Kibana 是一个基于 Node.js 的 Elasticsearch 索引库数据统计工具,能够利用 Elasticsearch 的聚合功能,生成各类图表,如柱形图,线状图,饼图等。
并且还提供了操做 Elasticsearch 索引数据的控制台,而且提供了必定的API提示,很是有利于咱们学习 Elasticsearch 的语法。
一、配置
咱们能够把 Kibana 当成,durid 链接池对于 mysql 的可视化来理解。
下载地址:https://www.elastic.co/cn/downloads/kibana
解压后,进入安装目录下的 config 目录,修改 kibana.yml 文件:
修改elasticsearch服务器的地址,去掉原来的注释:
elasticsearch.url: "http://localhost:9200"
Kibana 的监听端口为 5601:http://127.0.0.1:5601 浏览器打开以下图所示:
Dev Tools 至关于一个命令行窗口工具,带提示,Elasticsearch 执行的数据格式为 json,举例:
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我喜欢编程"
}
因为 Elasticsearch 在拆分单词时,是按空格来分,即 hello world 分为 hello 和 world,这是没问题的,可是在拆分中文时也是按照一个汉字一个汉字来拆分。即“我喜欢编程”分为 我、喜、欢、编、程 5个字符,因此就须要用到 IK 分词器这个插件来进行拆分。
Lucene 的 IK 分词器早在 2012 年已经没有维护了,如今咱们要使用的是在其基础上维护升级的版本,而且开发为 ElasticSearch 的集成插件了,与 Elasticsearch 一块儿维护升级,版本也保持一致。
IK下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
注意 ES 与 IK 版本对应地址:https://github.com/medcl/elasticsearch-analysis-ik/tree/2.x
将 zip 包,解压到 Elasticsearch 目录的 plugins 目录中:
而后重启 Elasticsearch
上文也了解到 ES 操做的数据为 json,实际项目中,好比 springboot 中,无须操做 json,都是面向对象编程,可是,学习其实际原理当然重要。
建立索引的请求格式:
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
示例:
语法
Get请求能够帮咱们查看索引信息,格式:
GET /索引库名
删除索引使用DELETE请求
语法
DELETE /索引库名
语法
请求方式依然是PUT
PUT /索引库名/_mapping/类型名称
{
"properties": {
"字段名": {
"type": "类型",
"index": true,
"store": true,
"analyzer": "分词器"
}
}
}
ik_max_word
即便用ik分词器示例
发起请求:
PUT niceyoo2/_mapping/goods
{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"images": {
"type": "keyword",
"index": "false"
},
"price": {
"type": "float"
}
}
}
响应结果:
{
"acknowledged": true
}
语法:
GET /索引库名/_mapping
示例:
GET /niceyoo2/_mapping
响应:
{
"niceyoo2": {
"mappings": {
"goods": {
"properties": {
"images": {
"type": "keyword",
"index": false
},
"price": {
"type": "float"
},
"title": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
}
Elasticsearch 中支持的数据类型很是丰富:
咱们说几个关键的:
String类型,又分两种:
Numerical:数值类型,分两类:
Date:日期类型
elasticsearch 能够对日期格式化为字符串存储,可是建议咱们存储为毫秒值,存储为 long,节省空间。
index影响字段的索引状况。
index的默认值就是true,也就是说你不进行任何配置,全部字段都会被索引。
可是有些字段是咱们不但愿被索引的,好比商品的图片信息,就须要手动设置index为false。
是否将数据进行额外存储。
在学习lucene和solr时,咱们知道若是一个字段的store设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。
可是在Elasticsearch中,即使store设置为false,也能够搜索到结果。
缘由是Elasticsearch在建立文档索引时,会将文档中的原始数据备份,保存到一个叫作_source
的属性中。并且咱们能够经过过滤_source
来选择哪些要显示,哪些不显示。
而若是设置store为true,就会在_source
之外额外存储一份数据,多余,所以通常咱们都会将store设置为false,事实上,store的默认值就是false。
激励因子,这个与lucene中同样
其它的再也不一一讲解,用的很少,你们参考官方文档:
下篇带你们详细了解 elasticsearch 中的
若是文章有错的地方欢迎指正,你们互相留言交流。习惯在微信看技术文章,想要获取更多的Java资源的同窗,能够关注微信公众号:niceyoo