ElasticSearch常用的API接口(网页上使用)

 1 基本操作

(1)创建一个索引,添加

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

字符串类型
text、
keyword

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

Text和Keyword类型的区别

text: 它会为该字段的内容进行拆词操作,并放入倒排索引表中

keyword: 它不会进行拆词操作

使用match匹配查询---对匹配的关键字进行拆词操作,并和倒排索引表中对应。

使用term精准匹配---它不会对关键字进行拆词操作,而且把关键字作为一个整体和倒排索引表进行匹配


数值型
long、Integer、short、byte、double、float、half float、
scaled float
日期类型
date
te布尔类型
boolean
二进制类型
binary
等等…
(2)指定字段的类型(使用PUT)
类似于建库(建立索引和字段对应类型),也可看做规则的建立

PUT /test02
{
 "mappings": {
  "properties": {
     "name":{
      "type": "text"
    },
     "age":{
      "type": "integer"
    }
  }
}
}

(3)获取信息

get test02

(4)获取默认类型 

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

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

如果自己的文档字段没有被指定,那么ElasticSearch就会给我们默认配置字段类型

 扩展:通过 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)修改

两种方案

①旧的(使用put覆盖原来的值)
版本+1(_version)
但是如果漏掉某个字段没有写,那么更新是没有写的字段 ,会消失

①旧的(使用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

6、删除

GET /test1
DELETE /test1

7、查询(简单条件)

GET /test3/_doc/_search?q=name:流柚

8、复杂查询

test3索引中的内容

PUT /user/_doc/1
{
 "name":"刘民谐",
 "age": 18,
 "desc": ["有趣","幽默","开朗"]

PUT /user/_doc/2
{
 "name":"马老师",
 "age": 18,
 "desc": ["严谨","冷漠"]
}
PUT /user/_doc/3
{
 "name":"流油",
 "age": 3,
 "desc":["美丽","年轻","苗条"]
}

①查询匹配
match :匹配(会使用分词器解析(先分析文档,然后进行查询))
_source :过滤字段
sort :排序
form 、 size 分页

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

②多条件查询(bool)

must 相当于 and
should 相当于 or
must_not 相当于 not (... and ...)
filter 过滤

/// bool 多条件查询
 must <==> and
 should <==> or
 must_not <==> not (... and ...)
 filter数据过滤
 boost
 minimum_should_match
GET /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 直接通过 倒排索引 指定词条查询
适合查询 number、date、keyword ,不适合text

// 精确查询(必须全部都有,而且不可分,即按一个完整的词查询)
// term 直接通过 倒排索引 指定的词条 进行精确查找的
GET /blog/user/_search
{
"query":{
 "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"]
}// 不会分词,即 测试liu
GET _analyze
{
"analyzer": "standard",
"text": ["测试liu"]
}// 分为 测 试 liu

⑥高亮查询

/// 高亮查询
GET blog/user/_search
{
"query": {
 "match": {
  "name":"流"
 }
}
,
"highlight": {
 "fields": {
  "name": {}
 }
}
}
// 自定义前缀和后缀
GET blog/user/_search
{
"query": {
 "match": {
  "name":"流"
 }
}
,
"highlight": {
 "pre_tags": "<p class='key' style='color:red'>",
 "post_tags": "</p>",
 "fields": {
  "name": {}
 }
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值