ElasticSeach学习

ElasticSearch(简称ES)

介绍

​ Lucene只是一个先进,性能高的全文搜索的引擎库,我们需要一个高可用,另配置的基于Java的内容检索工具,他就是ElasticSearch。

​ ES优化了Lucene的调用方式,实现了高可用的分布式集群的搜索方案,分布式的实时文件储存,每个字段都被索引并可被搜索,分布式的实时分析搜索引擎

ElasticSearch Lucene
集群 支持 不支持
支持语言 多种 仅java
使用 通过Http使用RESTful风格 仅API

ES客户端

官方推荐使用Kibana

ES语法

PUT添加或修改

put的修改先删除原数据再重新插入

1
2
3
4
PUT index(数据库名)/type(表名)/id(数据的ID)
{
数据...
}

POST添加或修改

post的添加自动生成Document的id

1
2
3
4
POST index/type
{
数据...
}

post的修改为局部修改

1
2
3
4
5
6
POST index/type/id/_update(固定写法)
{
doc:{
数据...
}
}

DELETE删除

删除指定id的文档

1
DELETE index/type/id

删除整个库

1
DELETE index

GET查询

通过id查询

查询制定document的id

__search_表示查询所有

例:GET index/type/_search

1
GET index/type/id

查询指定字段

批量查询

_mget

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//完整版批量查询
GET _mget
{
"docs":[
{
"_index":"",
"_type":"",
"_id":"",
//_source可选
"_source":["id","name"]
}
]
}

//同类型下的批量索引查询
GET index/type/_mget
{
"ids":[1,2,3]
}

查询所有

关键字_search

1
GET index/_search

分页查询

关键字size每页条数 from开始索引

1
GET index/_search?size=xxx&from=xxx

字符串查询

关键字q

1
GET index/_search?q=name:"zx"

DSL查询语言

介绍

DSL(Domain Specific Lanaguage)是ES提供的以JSON请求题格式来进行查询的语言,在查询时必须传入query

示例

1. 标准查询

match为【匹配】关键字

查询dms下的所有sex包含true的数据,且只查询name和sex字段数据,且分页查询,从第一条开始查询2条,且先以id字段降序,再以age字段升序

query中的match使用匹配查询,通过sex字段原来的数据被分词后,与查询内容相匹配,命中则查询出

1
2
3
4
5
6
7
8
9
10
11
12
GET dms/_search
{
"query": {
"match": {
"sex": true
}
},
"_source": ["name","sex"],
"from": 0,
"size": 2,
"sort": [{"id": "desc"},{"age": "asc"}]
}

2. 模糊查询

查询dmsname字段包含emp的所有数据

模糊查询使用关键字wildcard

*表示模糊匹配1-n个占位符,?表示模糊匹配1个占位符

1
2
3
4
5
6
7
8
GET dms/_search
{
"query": {
"wildcard": {
"name":"*emp*"
}
}
}

3. 单词搜索与过滤

从搜索结果中过滤结果,term表示按单词过滤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GET dms/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": {
"term": {
"name": "emp"
}
}
}
}
}

分词器集成

  1. 集成合适的分词器
  2. 设置字段的分词器

通过客户端告诉ES某个字段使用分词

坚持学习发博,请支持我的原创!