ES的使用采用的是api接口式的调用,我们可以把ES理解为类似于mysql的数据库,只不过它的语法不同而已。
索引的基本操作
创建索引(数据库表)
创建一个空白索引,没有任何数据与配置;
此处没有制定索引类型,所以类型默认为“_doc”;
7版本之后单个索引只能有一个类型;
PUT /demo01
删除索引
DELETE /demo02
文档增删改
基本的请求格式为:
/索引名/索引类型/
文档新增
PUT /demo01/_doc/2
{
"name":"王五",
"age":22
}
可以不指定文档id,由es生成,但要注意必须使用post;
POST /demo01/_doc/
{
"name":"王wqe五",
"age":22
}
文档修改
需要注意:如果此种方式修改时只指定部分字段,其他字段会消失
PUT /demo01/_doc/1
{
"name":"往往",
"age":99
}
那么,安全的部分字段修改方式:
POST /demo01/_doc/1/_update
{
"doc":{
"name":"往6往"
}
}
文档删除
DELETE /demo01/_doc/eLVqy4oBq3Z8H-ZbVC_c
文档查询
查询所有文档
GET /{索引名}/{类型名}/_search
//例:GET /blog/_search
//索引名:blog
//类型名:_loc 被省略
匹配查询(match)
match查询会根据预设的分词器进行分词并查询返回结果
GET /blog/_search
{
"query": {
"match": {
"title": "c"
}
}
}
根据条件搜索
GET /{索引名}/{类型名}/_search?q=id:1000
//例:GET /blog/_search?q=id:1000
//q=id:1000 等价于 where id=1000
可以把查询条件封装为JSON字符串
GET /blog/_search
{
"query": {
"term": {
"id": {
"value": 1001
}
}
}
}
查询部分字段
查询blog索引中id=1001的数据,并返回目标数据的id和title字段;
GET /blog/_search
{
"query": {
"term": {
"id": {
"value": 1001
}
}
}
, "_source": ["id","title"] //通过"_source"控制返回字段
}
分页查询
查询blog索引中从第一条数据开始返回一页20条的数据;
from:首条数据起始行;
size:每页记录条数
GET /blog/_search
{
"_source": ["id","title"],
"from": 1,
"size": 20
}
范围查询(range)
查询blog索引中id大于1000小于1002的数据;
gt:大于;
lt:小于;
gte:大于等于;
lte:小于等于;
GET /blog/_search
{
"query": {
"range": {
"id": {
"gt": 1000,
"lt": 1002
}
}
}
}
精准查询(trem)
查询blog索引中id等于1000的数据;
GET /blog/_search
{
"query": {
"term": {
"id": {
"value": "1000"
}
}
}
}
排序(sort)
查询blog索引数据并且以id降序返回;
GET /blog/_search
{
"sort": [
{
"id": {
"order": "desc"
}
}
]
}
多条件查询
must 等价于and
查询blog索引中,id为1000,1001,1002并且title包含java的文档;
GET /blog/_search
{
"query": {
"bool": {
"must": [
{
"terms": {
"id": [
"1000",
"1001",
"1002"
]
}
},
{
"match": {
"title": "java"
}
}
]
}
}
}
should等价于or
查询blog索引中,id为1000,1001或者title包含java的数据;
GET /blog/_search
{
"query": {
"bool": {
"should": [
{
"terms": {
"id": [
"1000",
"1001"
]
}
},
{
"match": {
"title": "java"
}
}
]
}
}
}
must-not 等价于!=
查询blog索引中,id不为1000,1001且title不包含java的数据;
GET /blog/_search
{
"query": {
"bool": {
"must_not": [
{
"terms": {
"id": [
"1000",
"1001"
]
}
},
{
"match": {
"title": "java"
}
}
]
}
}
}
高亮显示
其实就是通过前后缀拼接html语法,来设置前端展示数据时的字体颜色;
GET /blog/_search
{
"query": {
"term": {
"id": {
"value": "1000"
}
}
}
, "highlight": {
"pre_tags": "<font color='red'>",
"post_tags": "</font>",
"fields": {
"id": {}
}
}
}