Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎
- elasticsearch:https://www.elastic.co/cn/elasticsearch
运行bat,http://localhost:9200 - elasticsearch-head:https://github.com/mobz/elasticsearch-head
npm run start,http://localhost:9100 - kibana:https://www.elastic.co/cn/kibana
运行bat,http://localhost:5601
kibana 创建索引
js
// PUT /索引名/类型名/文档id
// {请求体}
PUT /test1/type1/1
{
"name":"zhangsan",
"age":1
}
设置索引规则(指定字段的类型)
js
PUT /test2
{
"mappings":{
"properties": {
"name":{
// text类型会进行分词解析
"type": "text"
},
"age":{
"type": "long"
},
"birthday":{
"type": "date"
},
"desc":{
// keyword类型不会进行分词解析,会整体匹配
"type": "keyword"
}
}
}
}
修改文档
js
方法一:直接使用PUT方式覆盖(未涉及的字段会被清空值)
方法二:使用POST方式在末尾加上"/_update"(不加的话,未涉及的字段也会被清空值)
POST /test1/type1/1/_update
{
"doc": {
"name":"zhangsan",
"age":1
}
}
修改后,version 属性会加 1
删除索引、文档
js
DELETE 索引名
DELETE 索引名/类型名/文档id
查询索引、文档信息
js
GET 索引名
GET 索引名/类型名/文档id
// 条件查询
GET 索引名/类型名/_search?q=name:zhangsan
查询结果的匹配度越高,那么"_score"属性值就越大
查询
javascript
GET 索引名/类型名/_search
{
"query": {
"match": {
// 多个条件使用空格隔开
"字段名": "zhangsan lisi"
}
},
// 查询哪些字段,默认查询所有
"_source": ["name","age"],
// 排序
"sort": [
{
"age": {
"order": "desc"
}
}
],
//过滤器
"filter": [
{
// 范围
"range": {
"age": {
// gt:大于
// lt:小于
// gte:大于 等于
// lte:小于 等于
"gte": 1,
"lte": 3
}
}
}
],
// 分页查询
"from": 0,
"size": 2,
// 高亮查询
"highlight": {
// 自定义高亮前缀
"pre_tags": "<div>",
// 自定义高亮后缀
"post_tags": "</div>",
"fields": {
"name": {}
}
}
}
多条件查询
js
"query": {
"bool": {
// must:所有条件必须匹配,相当于 and
// must_not:所有条件必须不匹配,相当于 not
// should:匹配其中之一即可,相当于 or
"must": [
{
"match": {
"name": "zahngsan"
}
},
{
"match": {
"age": "2"
}
}
]
}
}
分词器
js
GET _analyze
{
// keyword 不进行分词解析
// standard 进行分词解析
"analyzer": "keyword",
"text": ["春眠不觉晓"]
}