赞
踩
目录
3、条件筛选查询(根据分词拆分规则匹配的)【不建议使用这种写法】
【PUT】方式更新:整体覆盖,也可理解为创建覆盖(不推荐)
【POST】方式更新:只更新需要的字段(推荐)
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、创建一个索引(同时写入数据)
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" //索引名
- }
GET /索引名
获得规则信息,可以通过 GET 请求获取具体的信息
创建时不指定字段类型
如果自己的文档字段没有指定类型,那么ES就会给我们默认配置字段类型
PUT /索引名/[类型名]/文档id
{
"name":"sally",
"age":25,
"birth":"1997-01-05"
}
PUT /索引名/[类型名]/文档id { "name":"sally", "age":25, "birth":"1997-01-05" }
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"
- }
- }
DELETE /索引名
通过DELETE 命令实现删除,根据你的请求来判断是删除索引还是删除索引下的文档记录
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":["技术大牛","性格好","暖男"]
- }
返回数据基本说明【重要】
"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" : [
- "技术大牛",
- "性格好",
- "暖男"
- ]
- }
- }
- ]
- }
GET 索引名/_search
GET 索引名/_doc/文档id
GET 索引名/_doc/_search?q=数据名:数据值
注意:put 在修改时,请求体如果数据少了几个字段(不是全量的数据),会进行整体数据覆盖,那么该字段数据就会被置空(如图二)
POST /索引名/[类型名]/文档id/_update
{
"doc":{
"需要更新的字段":"内容"
}
}
POST /索引名/[类型名]/文档id/_update { "doc":{ "需要更新的字段":"内容" } }
POST /索引名/[类型名]/_delete_by_query
{
"query":{
"match":{"查询的字段":"查询内容"
}
}
}
POST /索引名/[类型名]/_delete_by_query { "query":{ "match":{ "查询的字段":"查询内容" } } }
- {
- "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" : [
- "技术大牛",
- "性格好",
- "滑雪滑雪"
- ]
- }
会使用分词器解析匹配 ,先分析文档,然后再通过分析的文档进行查询
GET 索引名/_search
{
"query":{
"match":{"查询的字段":"查询内容"
}
}
}
GET 索引名/_search { "query":{ "match":{ "查询的字段":"查询内容" } } }
多条件使用空格隔开,只要满足其中一个结果就可以被查出,若有需要此时可以通过分值进行判断
tram查询直接通过倒排索引指定的词条进行精确查找
term 代表完全匹配,不进行分词器分析
term 查询的字段需要在mapping的时候定义好,否则可能词被分词。传入指定的字符串,查不到
GET 索引名/_search
{
"query": {
"term": {
"查询的字段":"查询内容"
}
}
}
GET 索引名/_search { "query": { "term": { "查询的字段":"查询内容" } } }
关键字 | 描述 |
---|---|
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": {
"查询的字段":"查询内容"
}
}
]
}
}
通过"_source"的方式控制只返回需要的结果
GET 索引名/_search
{
"query": {
"match": {
"查询的字段":"查询内容"
}
},
"_source": ["返回字段1","返回字段2"]
}
GET 索引名/_search { "query": { "match": { "查询的字段":"查询内容" } }, "_source": ["返回字段1","返回字段2"] }
通过"sort"的方式控制排序
GET 索引名/_search
{
"query": {
"match": {
"查询的字段":"查询内容"
}
},
"sort": [
{
"字段名": {
"order": "desc"
}
}
]
}
通过"from"控制起始行(默认从0开始),"size"控制查几条
同 MySQL 的 limit 相似
GET 索引名/_search
{
"from": 从第几条数据开始,
"size": 查询几条
}
搜索的相关结果可以高亮展示
GET 索引名/_search
{
"query": {
"match": {
"查询的字段":"查询内容"
}
},
"highlight": {
"pre_tags": 标签头,
"post_tags": 标签尾,
"fields": {
"字段名": {}
}
}
}
GET demo_learn_1/_search { "query": { "match": { "查询的字段":"查询内容" } }, "highlight": { "pre_tags": 标签头, "post_tags": 标签尾, "fields": { "字段名": {} } } }
默认标签
自定义标签
term:直接查询精确的解析(会用到分词器,分词器存在两种情况,text 和 keyword)
match:会使用分词器解析!(先分析文档,然后再通过分析的文档进行查询)
两个类型
keyword:一个整体,不进行分词分析
standard:标准分词器
- //分词结果(keyword)
- GET _analyze
- {
- "analyzer": "keyword",
- "text": ["张三java name"]
- }
-
-
- //分词结果(standard)
- GET _analyze
- {
- "analyzer": "standard",
- "text": ["张三java name"]
- }
- # 创建文档规则
- 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"
- }
-
(1)text类型的检索结果
字段name的类型定义为text,内容被分词解析器解析为多个分词结果,其中一个就是“张”所以可以查到
(2)keyword类型检索结果
字段desc的类型定义为keyword,内容不会被分词器进行解析
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。