ES的学习使用

一、ES中的文档操作

1.什么是ES中的文档?

document --存放数据
在ES里面 通过index索引库 type 类型(表) 行({id:name:}) 列 id /name
ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。
ES使用Javascript对象符号(JavaScript Object Notation),也就是JSON,作为文档序列化格式。JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
简单文档示例:

{
  "_index" : "test",
  "_type" : "user",
  "_id" : "1",
  "_version" : 3,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "xxxx",
    "age" : 20
  }
}

2.文档的增删改

在ES中存储数据的行为就叫做索引(indexing),文档归属于一种类型(type),而这些类型存在于索引(index)中,我们可以简单的对比传统数据库和ES的对应关系:
关系数据库(MYSQL) -> 数据库DB-> 表TABLE-> 行ROW-> 列Column
Elasticsearch -> 索引库Indices -> 类型Types -> 文档Documents -> 字段Fields
ES集群可以包含多个索引(indices)(数据库),每一个索引库中可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档包含多个字段(Fields)(列)。

#使用自己的ID创建
PUT /test/user/1
{
  "name":"xxxx",
  "age":20
}
#ES内置ID创建
POST /test/user/
{
  "name":"yyyyyy",
  "age":30
}
#获取指定ID的文档
GET /test/user/1
#返回文档的部分字段
GET /test/user/1?_source=name
#只返回文档内容
GET /test/user/1/_source
#更新整个文档
POST test/user/1
{
  "name":"小明"
}
#局部更新文档
POST test/user/1/_update
{
  "doc": {
    "name":"小王"
  }
}
#删除文档
DELETE test/user/1

3.文档的简单查询

PUT test/user/2
{
  "name":"小明",
  "age":20
}
PUT test/user/3
{
  "name":"小红",
  "age":18
}
PUT test/user/4
{
  "name":"小刚",
  "age":19
}
PUT test/user/5
{
  "name":"小王",
  "age":20
}
PUT test/user/6
{
  "name":"小李",
  "age":21
}
#文档的简单查询
#通过文档的id获取
GET test/user/1
#批量获取
GET test/user/_mget
{
  "ids":["1","2","3"]
}
#空搜索
GET _search
#分页搜索
GET _search?size=1&from=2
#查询字符串
GET test/user/_search?q=age:18
GET test/user/_search?q=age[20 TO 30]

二、DSL查询与过滤

1.什么是DSL查询?

由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。
DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。
DSL有两部分组成:DSL查询和DSL过滤。

2.DSL查询

GET test/user/_search
{
  "query":{
    "match_all": {}
  },
  "from":1,
  "size":2,
  "sort":[{"age":"asc"}]
}

3.DSL过滤

DSL过滤 查询文档的方式更像是对于我的条件“有”或者“没有”,–精确查询
而DSL查询语句则像是“有多像”。–类似于模糊查询
DSL过滤和DSL查询在性能上的区别 :

(1)过滤结果可以缓存并应用到后续请求。
(2)查询语句同时 匹配文档,计算相关性,所以更耗时,且不缓存。
(3)过滤语句 可有效地配合查询语句完成文档过滤。

原则上,使用DSL查询 做模糊查询 或其他需要进行相关性评分的场景,其它全用DSL过滤。

GET test/user/_search
{
  "query":{
    "bool": {
      "must":[{
       "match_all": {} 
      }],
      "filter": {
       "term": {
         "age": 20
       }
      }
    }
  },
  "from":1,
  "size":2,
  "sort":[{"age":"asc"}]
}
发布了18 篇原创文章 · 获赞 1 · 访问量 418

猜你喜欢

转载自blog.csdn.net/weixin_43714592/article/details/104010720
今日推荐