1.ElasticSerach定义:
ES=elasticsearch简写,
Elasticsearch是一个开源的高扩展的分布式全文检索引擎,
它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,
但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,
从而让全文搜索变得简单。
2.ES和Lucene区别:
1)Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,
更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
2)Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,
但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
ES和Solr区别
3.ES数据架构和Mysql对比
Index ---- DataBase
Type ----- Table
Document--- Row
4.ES集群颜色
绿色:健康,主分片和副分片都可用
黄色:警告,主分片可用,没有副本分片
红色:错误,主分片中部分索引已经不可使用,但是不影响其他分片正常使用
5.RESTfull 风格
POST : 添加
GET : 查询
PUT : 修改 (没有此数据则添加数据,如果有则修改数据)
DELETE: 删除
6.文档索引的创建
http://localhost:9200/book-002/jk-book/1/
请求方法为 : POST
{
"_index": "book-002", 索引名称
"_type": "jk-book", 类型名称
"_id": "1", 唯一ID,如果指定了ID则使用指定的,没有指定ID则ES会自动补充ID
"_version": 1, 数据版本号,新创建的数据从1开始,每次对数据修改则加1
"result": "created", created:创建成功,updated:修改成功
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
7.启动Kibana 在/bin/kibana.bat
访问:http://localhost:5601
启动Kibana后会在ES中创建一个名为.Kibana所以只有一个分片
8.kibana操作语法和命令
GET _cat/health 查看当前索引状态
GET _cat/indices 查看所有集群状态
GET _search 查询所有内容
{
"query": {
"match_all": {
}
}
}
查询指定索引和类型
GET /book-002/jk-book/_search
{
"query": {
"match_all": {
}
}
}
添加数据
POST /book-002/jk-book/3
{
"id":3,
"name":"springCluod",
"author":"王听话",
"price":250,
"createTime":"2019-01-22"
}
修改数据
PUT /book-002/jk-book/3
{
"id":3,
"name":"springCluod",
"author":"王不听话",
"price":250,
"createTime":"2019-01-22"
}
删除数据
DELETE /book-002/jk-book/4
GET /book-002/jk-book/_search
{
"query": {
"match": {
"name": "ES6" 条查
}
},
"highlight": {
"fields": {
"name": {} 指定字段高亮 <em>内容</em>
}
}
}
页面设置高亮
em {
font-style: normal;
color: #c00;
}
区间查询 结合 bool使用
GET /book-002/jk-book/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": {
"range": {
"price": {
"gte": 201, 大于等于
"lte": 300 小于等于
}
}
}
}
}
}
短语搜索
GET /book-002/jk-book/_search
{
"query": {
"match_phrase": {
"name": "大数据"
}
}
}
sort 排序 from起始条数 size每页条数
GET /book-002/jk-book/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price.keyword": { 排序字段
"order": "asc"
}
}
],
"from": 2,
"size": 2
}
7.ES配置ik分词器,ik分词器官方已经提供好词汇
将ik分词器的配置信息放入 在es目录/plugins/ik/ 目录下
注意ik目录需要手动创建
ik_smart: 简单分词器方式,只能组成一次词汇进行分词
ik_max_word: 深度分词器方式,将所有能组成的词汇进行分词
standard:标准分词器
自定义词汇
在ik目录下创建自定义词汇文件:文件名.dic
在文件中添加词汇格式为:每行为一个词汇
注意:更新后自定义词汇只会对之后的数据起作用
同义词:
1.创建文件:在es目录/config/analysis/synonym.txt
2.文件内容同义词汇为一行每个词汇用逗号分隔
3.创建索引的时候指定同义词汇文件
PUT /index-ik-006/
{
"settings": {
"number_of_shards": 5, #指定分片数量
"number_of_replicas": 1, #指定副本数量
"analysis": { #自定义分词方式
"analyzer": { #创建自自定义分词方式
"ik_synonym": { #指定分词方式名称,会在映射属性的时候用到
"type": "custom",
"tokenizer": "ik_max_word", #指定同义词类型为ik_max_word
"filter": [
"my_synonym_filter" #找到同义词过滤器
]
}
},
"filter": { #配置分词过滤器
"my_synonym_filter": {
"type": "synonym", #指定类型为同义词
"synonyms_path": "analysis/synonym.txt" #指定同义词配置文件
}
}
}
}
}
4.对属性添加映射
#添加属性映射以及指定那个属性进行分词
POST /index-ik-006/test-ik/_mapping
{
"properties": {
"content":{
"type": "text",
"analyzer": "ik_synonym", #分词方式为自定义同义词方式,创建索引的时候有定义
"store": true
},
"price":{
"type": "double"
}
}
}
5. 添加数据,搜索数据
#给索引添加数据
POST /index-ik-006/test-ik/100
{
"content":"御帝哥哥",
"price":100
}
GET /index-ik-006/test-ik/_search
{
"query": {
"match": {
"content": "玄奘"
}
},
"highlight": {
"fields": {
"content": {}
}
}
}
3.五年高考,三年模拟
同义词--》分词:
西红柿-> 番茄,洋柿子,圣女果
土豆->马铃薯,tudou,tu豆
红薯->地瓜,番薯
5年---》五年
gaokao--》高考
3nian ---》 三年
mo拟--》模拟