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": {} } } }
�亮: 一般公司内网有自己的私服
lqh12138: 可以在电脑上整个maven的本地仓库
qq_37937131: 那肯定是需要自己提前下载好依赖
nreyog: 没网的话,maven能加载那些依赖吗
younger123rtyui9: 写的很全面,请加快剩下内容的更新