栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ES命令操作(Rest风格说明)

ES命令操作(Rest风格说明)

ElasticSearch目录


文章目录

五、ES命令操作(Rest风格说明)

5.1、基本Rest命令说明5.2、关于索引的基本操作

5.2.1、创建一个索引,添加5.2.2、字段数据类型5.2.3、指定字段的类型(使用PUT)5.2.4、获取建立的规则信息5.2.5、获取默认信息5.2.6、修改

①旧的(使用put覆盖原来的值)②新的(使用post的update) 5.2.7、删除 5.3、关于文档(行记录)的基本操作

5.3.1、查询(简单条件)5.3.2、复杂查询

①匹配查询②布尔值查询、多条件匹配查询(bool)③匹配数组,匹配一个字段的多个条件④精确查询⑤text和keyword 类型对比⑥高亮查询

五、ES命令操作(Rest风格说明)

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

5.1、基本Rest命令说明
methodurl地址描述
PUT(创建,修改)localhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)
POST(创建)localhost:9200/索引名称/类型名称创建文档(随机文档id)
POST(修改)localhost:9200/索引名称/类型名称/文档id/_update修改文档
DELETE(删除)localhost:9200/索引名称/类型名称/文档id删除文档
GET(查询)localhost:9200/索引名称/类型名称/文档id查询文档通过文档ID
POST(查询)localhost:9200/索引名称/类型名称/文档id/_search查询所有数据
5.2、关于索引的基本操作 5.2.1、创建一个索引,添加
PUT /索引名称/类型名称/文档id
{请求体}

PUT /test1/type1/1
{  
	"name" : "流柚",  
	"age" : 18
}

5.2.2、字段数据类型

字符串类型

text、keyword

text:支持分词 ,全文检索,支持模糊、精确查询,不支持聚合,排序操作:text类型的最大支持的字符长度无限制,适合大字段存储;keyword:不支持分词 ,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。

数值型

long、Integer、short、byte、double、float、half float、scaled float

日期类型

date

布尔类型

boolean

二进制类型

binary

等等…

5.2.3、指定字段的类型(使用PUT)

类似于建库(建立索引和字段对应类型),也可看做规则的建立

PUT /test2
{  
    "mappings": {
        "properties": {
            "name": {
                "type": "text"      
            },
            "age":{
                "type": "long"      
            },
            "birthday":{
                "type": "date"      
            }    
        }  
    }
}

5.2.4、获取建立的规则信息

可以通过GET请求获取具体的信息

GET test2

5.2.5、获取默认信息

_doc 默认类型(default type),type 在未来的版本中会逐渐弃用,因此产生一个默认类型进行代替

PUT /test3/_doc/1
{  
	"name": "流柚",  
    "age": 18,  
    "birth": "1999-10-10"
}

GET test3

如果自己的文档字段没有被指定,那么ElasticSearch就会给我们默认配置字段类型。
如上图:通过命令 GET test3,查看索引test3中的字段默认类型,其中name字段的类型是text,但是该字段的关键字切分却是keyword类型,即不能分割。所以建议:在创建索引时,指明字段的类型与拆分规则,如下命令:

PUT /test3
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text",
        "analyzer": "ik_max_word"  // ik分词器-最细粒度拆分
        //这样在搜索的时候,才会匹配到我们需要的结果
      }
    }
  }
}


扩展:通过get _cat/ 可以获取ElasticSearch的当前的很多信息!

GET _cat/indices
GET _cat/aliases
GET _cat/allocation
GET _cat/count
GET _cat/fielddata
GET _cat/health
GET _cat/indices
GET _cat/master
GET _cat/nodeattrs
GET _cat/nodes
GET _cat/pending_tasks
GET _cat/plugins
GET _cat/recovery
GET _cat/repositories
GET _cat/segments
GET _cat/shards
GET _cat/snapshots
GET _cat/tasks
GET _cat/templates
GET _cat/thread_pool
5.2.6、修改

两种方案

①旧的(使用put覆盖原来的值)

版本+1(_version)但是如果漏掉某个字段没有写,那么更新时没有写的字段 ,会消失

PUT /test3/_doc/1
{
	"name" : "流柚是我的大哥",  
	"age" : 18,  
	"birth" : "1999-10-10"
}

GET /test3/_doc/1

// 修改会有字段丢失
PUT /test3/_doc/1
{  
    "name" : "流柚"
}

GET /test3/_doc/1

②新的(使用post的update)

version会改变需要注意doc不会丢失字段

POST /test3/_doc/1/_update

{  
    "doc":{
        "name" : "post修改,version不会加一",
        "age" : 2  
    }
}

GET /test3/_doc/1

5.2.7、删除
GET /test1
DELETE /test1

5.3、关于文档(行记录)的基本操作 5.3.1、查询(简单条件)
# 最简单的查询,类似与数据库通过id来查询。GET /test3/_doc/1GET /test3/_doc/_search?q=name:流柚

注意结果中的 “_score” 为匹配度,匹配度越高则分值越高,位置越靠前,就是权重的意思

还有 hits字段,在java中有对应的对象,它包含了:

索引和文档的信息查询的结果总数然后就是查询出来的具体的文档(行记录),数据中的东西都可以遍历出来了

5.3.2、复杂查询

blog索引中的内容

①匹配查询

_search :指明查询操作

query :构造查询条件

match:匹配(会使用分词器解析(先分析文档,然后进行查询))

_source:过滤字段,指定要查询出来哪几个字段信息

sort:排序,根据哪个字段排序,注意有此条件时,查询结果中"_score" 为null

分页查询: form (从第几个开始)、size (每页大小)

// 查询匹配  GET /blog/user/_search  {        "query":{        "match":{            "name":"流"        }        },        "_source": ["name","desc"]    ,        "sort": [        {            "age": {                "order": "asc"            }              }        ]    ,        "from": 0        ,        "size": 1  }

②布尔值查询、多条件匹配查询(bool)

must 相当于 andshould 相当于 ormust_not 相当于 notfilter 过滤(范围查询)

///  bool 多条件查询 must <==> and should <==> or must_not <==> not 不等于 filter数据过滤  (gte >=   lte <=) boost minimum_should_matchGET /blog/user/_search{    "query":{        "bool": {            "must": [                  {                       "match":{                          "age":3                         }                       },                {                    "match": {                        "name": "流"                         }                  }              ],            "filter": {                "range": {                        "age": {                           "gte": 1,                            "lte": 3                       }                }             }         }     }}

③匹配数组,匹配一个字段的多个条件

貌似不能与其它字段一起使用可以多关键字查(空格隔开),只要满足其中一个结果就可以被查出来match 会使用分词器解析(先分析文档,然后进行查询)搜词

// 匹配数组 貌似不能与其它字段一起使用// 可以多关键字查(空格隔开)// match 会使用分词器解析(先分析文档,然后进行查询)GET /blog/user/_search{  "query":{    "match":{      "desc":"年龄 牛 大"    }  }}

④精确查询

term 直接通过 倒排索引 指定 词条 查询 (可以和 match 对比一下)

term ,直接查询精确的match,会使用分词器解析! (先分析文档,然后在通过分析的文档进行查询! ) 关于分词:适合查询 类型 为 number、date、keyword ,不适合字段类型为 text

// 精确查询(必须全部都有,而且不可分,即按一个完整的词查询)// term 直接通过 倒排索引 指定的词条 进行精确查找的GET /blog/user/_search{  "query":{    "term":{      "desc":"年"   //查询“desc”字段中 带有“年”这个字的记录    }  }}//利用term 进行多条件查询//查询desc字段中含有 “年” 或者 “我”的记录GET /blog/user/_search{  "query":{      "bool":{          "should":{              "term":{                  "desc":"年"                 },              "term":{     			  "desc":"我"       		  }          }      }  }}

⑤text和keyword 类型对比

text:

支持分词,全文检索、支持模糊、精确查询,不支持聚合,排序操作;text类型的最大支持的字符长度无限制,适合大字段存储; keyword:

不进行分词,不会被分词器解析,直接索引、支持模糊、支持精确匹配,支持聚合、排序操作。keyword类型的最大支持的长度为——32766个UTF-8类型的字符,可以通过设置ignore_above指定自持字符长度,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。

// 测试keyword和text是否支持分词// 设置索引类型PUT /test{  "mappings": {    "properties": {      "text":{        "type":"text"      },      "keyword":{        "type":"keyword"      }    }  }}// 设置字段数据PUT /test/_doc/1{  "text":"测试keyword和text是否支持分词",  "keyword":"测试keyword和text是否支持分词"}// text 支持分词// keyword 不支持分词GET /test/_doc/_search{  "query":{   "match":{      "text":"测试"   }  }}// 查的到GET /test/_doc/_search{  "query":{   "match":{      "keyword":"测试"   }  }}// 查不到,必须是 "测试keyword和text是否支持分词" 才能查到GET _analyze{  "analyzer": "keyword",  "text": ["测试liu"]}// 不会分词,即 测试liuGET _analyze{  "analyzer": "standard",  "text": ["测试liu"]}// 分为: 测 试 liuGET _analyze{  "analyzer":"ik_max_word",  "text": ["测试liu"]}// 分为: 测试 liu
⑥高亮查询
/// 高亮查询GET blog/user/_search{  "query": {    "match": {      "name":"流"    }  },  "highlight": {    "fields": {      "name": {} // 查询出来的结果,name字段高亮显示    }  }}// 自定义前缀和后缀 的高亮查询 (自定义的前缀和后缀 会替换默认的)GET blog/user/_search{  "query": {    "match": {      "name":"流"    }  }  ,  "highlight": {    "pre_tags": "

", "post_tags": "

", "fields": { "name": {} } }}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/701539.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号