目录
一、常用操作
二、索引的基本操作
1、创建索引
2、查询索引 (查询索引规则及其它信息)
3、修改索引
方式1(PUT):旧的方式(不推荐)
方式2(POST):可以只改变部分字段(推荐)
4、删除索引
三、文档的基本操作
1、添加数据
2、查询数据【简单查询】
1、查询索引下的全部
2、根据文档id查询
3、条件筛选查询(根据分词拆分规则匹配的)【不建议使用这种写法】
3、修改数据
【PUT】方式更新:整体覆盖,也可理解为创建覆盖(不推荐)
【POST】方式更新:只更新需要的字段(推荐)
4、删除数据
【POST】方式删除:条件删除 (可支持多条件删除)
四、文档的复杂查询【重要】
1、返回数据基本说明
2、单字段多个条件匹配(match)
3、单字段精确匹配(term)
4、多条件复杂查询(bool)
5、返回值控制(_source)
6、查询排序(sort)
7、查询分页(from、size)
8、高亮查询结果(highlight)
五、定义文档规则【重要】
1、关于分词
2、查看分词结果(_analyze)
3、创建文档规则
1、创建文档(及测试数据)
2、查询结果案例
一、常用操作
Rest风格说明
一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。给予这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
method | URL地址 | 描述 |
---|---|---|
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 | 查询所有数据 |
elasticsearch工具自带命令
通过命令elasticsearch索引情况!通过 GET_cat/ 可以获得es当前的很多信息
GET _cat/indices?v
二、索引的基本操作
1、创建索引
1、创建一个索引(同时写入数据)
PUT /索引名/[类型名]/文档id
{
请求体
}
执行结果说明
{
"_index" : "test1", //索引名
"_type" : "type", //类型名
"_id" : "1", //id
"_version" : 1, //为1表示没有被更新过(每更新一次会+1)
"result" : "created", //created创建状态
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
2、创建一个索引规则(只创建索引和字段,不写入数据)
其中设置了每个字段的类型 type
执行结果说明
{
"acknowledged" : true,
"shards_acknowledged" : true, //状态成功
"index" : "test2" //索引名
}
2、查询索引 (查询索引规则及其它信息)
GET /索引名
获得规则信息,可以通过 GET 请求获取具体的信息
创建时不指定字段类型
如果自己的文档字段没有指定类型,那么ES就会给我们默认配置字段类型
3、修改索引
方式1(PUT):旧的方式(不推荐)
PUT /索引名/[类型名]/文档id
{
"name":"sally",
"age":25,
"birth":"1997-01-05"
}PUT /索引名/[类型名]/文档id { "name":"sally", "age":25, "birth":"1997-01-05" }
方式2(POST):可以只改变部分字段(推荐)
POST /索引名/[类型名]/文档id/_update
{
"doc":{
"name":"sally666"
}
}POST /索引名/[类型名]/文档id/_update { "doc":{ "name":"sally666" } }
PUT /test3/_doc/1
{
"name":"sally",
"age":25,
"birth":"1997-01-05"
}
POST /test3/_doc/1/_update
{
"doc":{
"name":"sally666"
}
}
4、删除索引
DELETE /索引名
通过DELETE 命令实现删除,根据你的请求来判断是删除索引还是删除索引下的文档记录
三、文档的基本操作
1、添加数据
PUT /索引名/[类型名]/文档id
{
请求体
}
PUT demo_learn/_doc/1
{
"name":"jerry",
"age":25,
"desc":"会滑板的程序猿",
"tags":["技术大牛","性格好","暖男"]
}
PUT demo_learn/_doc/2
{
"name":"max",
"age":25,
"desc":"实力与幸运并存",
"tags":["技术大牛","性格好","暖男"]
}
PUT demo_learn/_doc/3
{
"name":"jason",
"age":25,
"desc":"灵魂一问",
"tags":["技术大牛","性格好","暖男"]
}
2、查询数据【简单查询】
返回数据基本说明【重要】
"hits" : { //索引和文档的信息
"total" : {
"value" : 1, //结果数量
"relation" : "eq"
},
"max_score" : 1.6375021, //文档数据中最大的分值
"hits" : [
{
"_index" : "demo_learn", //索引名
"_type" : "_doc", //文档类型
"_id" : "3", //文档id
"_score" : 1.6375021, //文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
"_source" : { //文档数据内容
"name" : "jason",
"age" : 25,
"desc" : "灵魂一问",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
}
]
}
"hits" : { //索引和文档的信息
"total" : {
"value" : 2, //结果数量
"relation" : "eq"
},
"max_score" : 1.0341108, //文档数据中最大的分值
"hits" : [
{
"_index" : "demo_learn", //索引名
"_type" : "_doc", //文档类型
"_id" : "2", //文档id
"_score" : 1.0341108, //文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
"_source" : { //文档数据内容
"name" : "max",
"age" : 25,
"desc" : "实力与幸运并存",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
},
{
"_index" : "demo_learn",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.542544,
"_source" : {
"name" : "max哈哈哈",
"age" : 25,
"desc" : "实力与幸运并存",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
}
]
}
1、查询索引下的全部
GET 索引名/_search
2、根据文档id查询
GET 索引名/_doc/文档id
3、条件筛选查询(根据分词拆分规则匹配的)【不建议使用这种写法】
GET 索引名/_doc/_search?q=数据名:数据值
3、修改数据
【PUT】方式更新:整体覆盖,也可理解为创建覆盖(不推荐)
注意:put 在修改时,请求体如果数据少了几个字段(不是全量的数据),会进行整体数据覆盖,那么该字段数据就会被置空(如图二)
【POST】方式更新:只更新需要的字段(推荐)
POST /索引名/[类型名]/文档id/_update
{
"doc":{
"需要更新的字段":"内容"
}
}POST /索引名/[类型名]/文档id/_update { "doc":{ "需要更新的字段":"内容" } }
4、删除数据
【POST】方式删除:条件删除 (可支持多条件删除)
POST /索引名/[类型名]/_delete_by_query
{
"query":{
"match":{"查询的字段":"查询内容"
}
}
}POST /索引名/[类型名]/_delete_by_query { "query":{ "match":{ "查询的字段":"查询内容" } } }
四、文档的复杂查询【重要】
1、返回数据基本说明
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {//索引和文档的信息
"total" : {
"value" : 2,//结果数量
"relation" : "eq"
},
"max_score" : 1.0341108,//文档数据中最大的分值
"hits" : [
{
"_index" : "demo_learn_1",//索引名
"_type" : "_doc",//文档类型
"_id" : "3",//文档id
"_score" : 1.0341108,//文档数据分值(如果查询结果存在多条,匹配度越高,分值则越高)
"_source" : {//文档数据内容
"id" : "3",
"name" : "max",
"age" : 25,
"desc" : "实力与幸运并存",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
},
{
"_index" : "demo_learn_1",
"_type" : "_doc",
"_id" : "4",
"_score" : 0.542544,
"_source" : {
"id" : "4",
"name" : "max哈哈哈",
"age" : 25,
"desc" : "实力与幸运并存",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
}
]
}
}
提前构建一些数据
PUT demo_learn_1/_doc/1
{
"id" : "1",
"name" : "jerry",
"age" : "28",
"desc" : "会滑板的程序猿,好快乐~~~",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
PUT demo_learn_1/_doc/2
{
"id" : "2",
"name" : "jason",
"age" : 27,
"desc" : "灵魂一问",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
PUT demo_learn_1/_doc/3
{
"id" : "3",
"name" : "max",
"age" : 25,
"desc" : "实力与幸运并存",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
PUT demo_learn_1/_doc/4
{
"id" : "4",
"name" : "max哈哈哈",
"age" : 25,
"desc" : "实力与幸运并存",
"tags" : [
"技术大牛",
"性格好",
"暖男"
]
}
PUT demo_learn_1/_doc/5
{
"id" : "5",
"name" : "sally",
"age" : 26,
"desc" : "女神",
"tags" : [
"技术大牛",
"性格好",
"村长"
]
}
PUT demo_learn_1/_doc/6
{
"id" : "6",
"name" : "marvin",
"age" : 24,
"desc" : "哦,雪季的快乐",
"tags" : [
"技术大牛",
"性格好",
"滑雪滑雪"
]
}
2、单字段多个条件匹配(match)
会使用分词器解析匹配 ,先分析文档,然后再通过分析的文档进行查询
- match 查询词会被分词
- match_phrase 不会分词
- match_phrase 可对多个字段进行匹配
GET 索引名/_search
{
"query":{
"match":{"查询的字段":"查询内容"
}
}
}GET 索引名/_search { "query":{ "match":{ "查询的字段":"查询内容" } } }
多条件使用空格隔开,只要满足其中一个结果就可以被查出,若有需要此时可以通过分值进行判断
3、单字段精确匹配(term)
tram查询直接通过倒排索引指定的词条进行精确查找
term 代表完全匹配,不进行分词器分析
term 查询的字段需要在mapping的时候定义好,否则可能词被分词。传入指定的字符串,查不到
GET 索引名/_search
{
"query": {
"term": {
"查询的字段":"查询内容"
}
}
}GET 索引名/_search { "query": { "term": { "查询的字段":"查询内容" } } }
4、多条件复杂查询(bool)
关键字 | 描述 |
---|---|
must(and) | 相当于where 字段名1=值1 and 字段名2=值3 |
must_not(not) | 不等于 |
should(or) | 相当于where 字段名1=值1 or 字段名2=值3 |
filter | 过滤器条件 range:区间 gt:大于 gte:大于等于 lt:小于 lte:小于等于 |
GET 索引名/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"查询的字段":"查询内容"
}
},
{
"match": {
"查询的字段":"查询内容"
}
}
]
}
}
}
GET 索引名/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"查询的字段":"查询内容"
}
},
{
"term": {
"查询的字段":"查询内容"
}
}
],
"should": [
{
"match": {
"查询的字段":"查询内容"
}
}
]
}
}
5、返回值控制(_source)
通过"_source"的方式控制只返回需要的结果
GET 索引名/_search
{
"query": {
"match": {
"查询的字段":"查询内容"
}
},
"_source": ["返回字段1","返回字段2"]
}GET 索引名/_search { "query": { "match": { "查询的字段":"查询内容" } }, "_source": ["返回字段1","返回字段2"] }
6、查询排序(sort)
通过"sort"的方式控制排序
GET 索引名/_search
{
"query": {
"match": {
"查询的字段":"查询内容"
}
},
"sort": [
{
"字段名": {
"order": "desc"
}
}
]
}
7、查询分页(from、size)
通过"from"控制起始行(默认从0开始),"size"控制查几条
同 MySQL 的 limit 相似
GET 索引名/_search
{
"from": 从第几条数据开始,
"size": 查询几条
}
8、高亮查询结果(highlight)
搜索的相关结果可以高亮展示
GET 索引名/_search
{
"query": {
"match": {
"查询的字段":"查询内容"
}
},
"highlight": {
"pre_tags": 标签头,
"post_tags": 标签尾,
"fields": {
"字段名": {}
}
}
}GET demo_learn_1/_search { "query": { "match": { "查询的字段":"查询内容" } }, "highlight": { "pre_tags": 标签头, "post_tags": 标签尾, "fields": { "字段名": {} } } }
默认标签
自定义标签
五、定义文档规则【重要】
1、关于分词
term:直接查询精确的解析(会用到分词器,分词器存在两种情况,text 和 keyword)
match:会使用分词器解析!(先分析文档,然后再通过分析的文档进行查询)
两个类型
- text:会被分词器分析
- keyword:不会被分词器分析
2、查看分词结果(_analyze)
keyword:一个整体,不进行分词分析
standard:标准分词器
//分词结果(keyword)
GET _analyze
{
"analyzer": "keyword",
"text": ["张三java name"]
}
//分词结果(standard)
GET _analyze
{
"analyzer": "standard",
"text": ["张三java name"]
}
3、创建文档规则
1、创建文档(及测试数据)
# 创建文档规则
PUT demo_learn_2
{
"mappings": {
"properties": {
"name":{ //字段名
"type": "text" //字段类型
},
"desc":{
"type": "keyword"
}
}
}
}
# 创建数据
PUT demo_learn_2/_doc/1
{
"name":"张三java name",
"desc":"张三java desc"
}
PUT demo_learn_2/_doc/2
{
"name":"张三java name2",
"desc":"张三java desc2"
}
2、查询结果案例
(1)text类型的检索结果
字段name的类型定义为text,内容被分词解析器解析为多个分词结果,其中一个就是“张”所以可以查到
(2)keyword类型检索结果
字段desc的类型定义为keyword,内容不会被分词器进行解析文章来源:https://www.toymoban.com/news/detail-519916.html
文章来源地址https://www.toymoban.com/news/detail-519916.html
到了这里,关于Elasticsearch(一)基本语法命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!