安装head
- 解压
- 进入解压目录,执行 npm install
- 执行npm run start
- es配置可跨域,elasticsearch.yml配置文件末尾加上两行:
http.cors.enabled: true http.cors.allow-origin: "*"
分布式安装
配置master
- 修改elasticsearch.yml配置文件
- 末尾加上:
http.cors.enabled: true http.cors.allow-origin: "*" cluster.name: wali node.name: master node.master: true network.host: 127.0.0.1
配置node
- 末尾加上:
```
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: wali
node.name: slave1
network.host: 127.0.0.1
http.port: 8200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
```
- 若遇到集群id不匹配从而不能加入集群的问题时,需要删除从节点的/nodes目录数据
集群与节点
- 一个集群由一个以上节点组成
- 每个集群都有一个唯一的名称,默认为elasticsearch
- 一个节点只能属于一个集群
- 节点通过集群名字加入集群
- 每个节点都有自己的名字
- 节点能存储数据,参与集群索引数据以及搜索数据
索引
- 含有相同属性的文档集合
- 通过名字区别
- 可以增删查改
- 相当于sql的datebase
类型
- 一个索引可以定义一个或多个类型,有相同字段的文档,定义为一个类型
- 相当于table
文档
- 可以被索引的基本数据单位
- 相当于一行data
分片
- 每个索引都有多个分片,每个分片都是一个Lucene索引
- 创建索引时确定分片数量。默认五个
- 分担大数据时的搜索压力
备份
- copy一份分片就完成了分片的备份
- 提高可用性,可执行搜索操作分担压力
- 默认一个备份。可以后期修改备份数量
索引的创建
api的基本格式
http://ip:port/索引/类型/文档id
常用HTTP动词
GET/PUT/POST/DELETE
结构化
可创建结构化与非结构化索引
插入数据
- 指定文档id插入/自动产生文档id插入
修改数据
两种修改方式
-
URL:
/{index}/{type}/{docId}/_update
-
直接修改
需要修改的属性写到doc中
{
"doc" : {
}
}
- 脚本修改
- 修改age自增10
- lang指定脚本语言
- inline中写脚本内容
{
"script": {
"lang": "painless",
"inline:" "ctx._cource.age += 10"
}
}
- 修改age为100
- lang指定脚本语言
- inline中写脚本内容,引入params中的内容
- params为自定义的参数,可由脚本调用
{
"script": {
"lang": "painless",
"inline:" "ctx._cource.age = params.age",
"params": {
"age": 100
}
}
}
删除
删除文档
- DELETE请求
/{index}/{type}/{docId}
删除索引
- DELETE请求
/{index}
查询
- 简单查询、条件查询、聚合查询
简单查询
- GET方法
/{index}/{type}/{docId}
条件查询
- POST方法
/{index}/_search
- 查询所有数据
{ "query": { "match_all":{} }, "from": 1, // 从哪里开始 "size": 10 // 条数 }
- 关键词查询
- 查询标题含有elacticSearch书籍,并按照出版日期倒叙
{ "query": { "match":{ "title": "elacticSearch" } }, "sort": [ { "publish_data": { "order": "desc" } } ] }
聚合查询
- POST方法
/{index}/_search
- 按照书籍字数信息进行聚合
{ "aggs": { "group_by_word_count": { // 自定义 "terms": { // 关键词 "field": "word_count" } } } }
- 按照书籍字数信息与出版时间进行聚合
{ "aggs": { "group_by_word_count": { // 自定义 "terms": { // 关键词 "field": "word_count" } }, "group_by_publish_date": { // 自定义 "terms": { // 关键词 "field": "publish_date" } } } }
- 对书籍字数进行统计计算
{ "aggs": { "grades_word_count": { // 自定义 "stats": { // 关键词,统计计算 "field": "word_count" } } } }
- 计算书籍字数的最小值
{ "aggs": { "grades_word_count": { // 自定义 "min": { // 关键词,最小值 "field": "word_count" } } } }
查询方式
- 子条件查询:特定字段查询所指特定值
- 符合条件查询:以一定的逻辑组合子条件查询
子条件查询
- query Context、filter Context
Query Context:除了判断文档是否满足查询条件外,还会计算一个_score来表示匹配的成都
- 全文本查询:针对文本类型数据
- 字段级别查询:针对结构化数据,如数字日期
- 全文本查询
- POST方法, /{index}/_search
- 模糊匹配:模糊查询作者为瓦力的数据
{ "query": { "match": { // 关键字, 模糊匹配 "author": "瓦力" } } }
- 习语匹配:精确查找匹配 title包含
ElacticSearch
的数据
{ "query": { "match_phrase": { // 关键字, 习语匹配 "title": "ElacticSearch" } } }
- 多个字段的模糊匹配查询: 搜索作者和名称字段中包含瓦力的数据
{ "query": { "multi_match": { // 关键字, 多个字段匹配 "query": "瓦力", "fields": ["author", "title"] } } }
- 语法查询: 模糊匹配ElasticSearch与大法(都要匹配到)
{ "query": { "query_string": { // 关键字, 语法查询 "query": "ElasticSearch AND 大法" } } }
- 语法查询: 模糊匹配ElasticSearch或瓦力,限制匹配字段为title与author
{ "query": { "query_string": { // 关键字, 语法查询 "query": "ElasticSearch OR 瓦力", "fields:": ["author", "title"] } } }
- 字段级别查询
- 查询字数为1000的书籍
{ "query": { "term": { // 关键字,具体项 "word_count": 1000 } } }
- 范围查询:查询字数介于1000-2000之间的数据
{ "query": { "range": { // 关键字,范围查询 "word_count": { "gte": 1000, // 加e,表示 大于等于,去除e,表示大于 "lte": 2000 } } } }
- 范围查询:查询出版日期在2017-1-1至今日之间的数据
{ "query": { "range": { // 关键字,范围查询 "publish_date": { "gt": "2017-01-01", "lte": "now" // now表示今天 } } } }
filter Context
- 查询过程中,只判断该文档是否满足条件,只有yes或no
- elacticSearch会对filter的结果进行缓存
- 效率比query高一些
- 查询书籍字数为1000的数据
{ "query": { "bool": { "filter": { "term": { "word_count": 1000 } } } } }
复合条件查询
- 固定分数查询
{
"query": {
"constant_score": {
"filter": {
"match": {
"title": "ElaticSearch"
}
}
}
}
}
- bool查询,满足一个
{
"query": {
"bool": {
"should": { // 关键字,或
"match": {
"author": "瓦力"
},
"match": {
"title": "ElasticSearch"
}
}
}
}
}
- bool查询,必须满足所有条件;查询作者为瓦力且title为ElasticSearch且字数为1000的书
{
"query": {
"bool": {
"must": { // 关键字,与
"match": {
"author": "瓦力"
},
"match": {
"title": "ElasticSearch"
}
},
"filter": {
"term": {
"word_count": 1000
}
}
}
}
}
- bool查询,不能满足; 查询作者不是瓦力的书
{
"query": {
"bool": {
"must_not": { // 关键字,与
"term": {
"author": "瓦力"
}
}
}
}
}
网友评论