创建索引shopping

  1. PUT shopping

不能用POST shopping
因为POST不是幂等的

查询指定索引:

  1. GET shopping

查询所有索引:

  1. GET _cat/indices?v


v是展现详细信息

删除指定索引shopping:

  1. DELETE shopping

索引中添加数据,用POST

  1. POST shopping/_doc
  2. {
  3. "title":"小米手机",
  4. "catagory":"小米",
  5. "image":"http://xiaomi.jpg",
  6. "price":3999.00
  7. }

带ID添加:

  1. POST shopping/_doc/1001
  2. {
  3. "title":"小米手机",
  4. "catagory":"小米",
  5. "image":"http://xiaomi.jpg",
  6. "price":3999.00
  7. }

或者:

  1. PUT shopping/_doc/1001
  2. {
  3. "title":"小米手机",
  4. "catagory":"小米",
  5. "image":"http://xiaomi.jpg",
  6. "price":3999.00
  7. }

或者:

  1. PUT shopping/_create/1003
  2. {
  3. "title":"小米手机",
  4. "catagory":"小米",
  5. "image":"http://xiaomi.jpg",
  6. "price":3999.00
  7. }

注意这里 id必须是没添加过的

这里的本质原因就是PUT是幂等的,POST是非幂等的

根据ID查数据

  1. GET shopping/_doc/1001

查询所有:

  1. GET shopping/_search

全量覆盖修改:

  1. PUT shopping/_doc/1001
  2. {
  3. "title":"华为手机"
  4. }

没有写的属性会丢失

  1. POST shopping/_doc/1003
  2. {
  3. "doc":{ //这个写不写都行,写了映射的结构会多一层doc
  4. "title":"华为手机"
  5. }
  6. }

这个也是全量修改

增量修改:加update

  1. POST shopping/_update/1003
  2. {
  3. "doc":{
  4. "title":"华为手机"
  5. }
  6. }

根据ID删除数据:

  1. DELETE shopping/_doc/1001

条件查询:

  1. GET shopping/_search?q=catagory="小米"

这种方式不好,一般不用,可能会出现乱码情况

一般用这种

  1. GET shopping/_search
  2. {
  3. "query" :{
  4. "match": {
  5. "catagory": "小米"
  6. }
  7. }
  8. }

全量查询:

  1. GET shopping/_search
  2. {
  3. "query" :{
  4. "match_all": {}
  5. }
  6. }

分页查询:
from:起始页,计算公式:(页码-1)*每页数据条数
size:每页多少条

  1. GET shopping/_search
  2. {
  3. "query" :{
  4. "match_all": {}
  5. },
  6. "from": 0,
  7. "size": 2
  8. }

分页查询且只看指定字段: _source

  1. GET shopping/_search
  2. {
  3. "query" :{
  4. "match_all": {}
  5. },
  6. "from": 0,
  7. "size": 2,
  8. "_source": ["title"]
  9. }

分页查询,查看指定字段,并且排序:

  1. GET shopping/_search
  2. {
  3. "query" :{
  4. "match_all": {}
  5. },
  6. "from": 0,
  7. "size": 2,
  8. "_source": ["title"],
  9. "sort": [
  10. {
  11. "price": {
  12. "order": "desc"
  13. }
  14. }
  15. ]
  16. }

多条件查询

  1. GET shopping/_search
  2. {
  3. "query" :{
  4. "bool": {
  5. "must": [
  6. {
  7. "match": {
  8. "catagory": "小米"
  9. }
  10. },
  11. {
  12. "match": {
  13. "price": "3999"
  14. }
  15. }
  16. ],
  17. "should": [
  18. {
  19. "match": {
  20. "title": "华为"
  21. }
  22. }
  23. ],
  24. "filter": {
  25. "range": {
  26. "price": {
  27. "gte": 1999,
  28. "lte": 4000
  29. }
  30. }
  31. }
  32. }
  33. }
  34. }

must是与
should是或
filter range是范围查询

完全匹配

  1. GET shopping/_search
  2. {
  3. "query": {
  4. "match_phrase": {
  5. "title": "华为"
  6. }
  7. }
  8. }

match和match_phrase的区别:
https://www.yuque.com/frank-jzao9/ter554/binh4e

高亮显示

  1. GET shopping/_search
  2. {
  3. "query": {
  4. "match_phrase": {
  5. "title": "华为"
  6. }
  7. },
  8. "highlight": {
  9. "fields": {
  10. "title": {}
  11. }
  12. }
  13. }

高亮上下对应

  1. GET shopping/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "should": [
  6. {
  7. "match": {
  8. "title": "华为"
  9. }
  10. },
  11. {
  12. "match": {
  13. "catagory": "华为"
  14. }
  15. }
  16. ]
  17. }
  18. },
  19. "highlight": {
  20. "fields": {
  21. "title": {},
  22. "catagory": {}
  23. }
  24. }
  25. }

聚合操作

  1. GET shopping/_search
  2. {
  3. "aggs": {
  4. "price_group": { //统计结果名称,随意取名
  5. "terms": { //分组,固定写法
  6. "field": "price", //分组字段
  7. "size": 10 //统计结果显示几条
  8. }
  9. }
  10. },
  11. "size": 0 //0表示不查看原始数据
  12. }

结果:
image.png

平均值

  1. GET shopping/_search
  2. {
  3. "aggs": {
  4. "price_avg": { //统计结果名称,随意取名
  5. "avg": { //分组,固定写法
  6. "field": "price" //分组字段
  7. }
  8. }
  9. },
  10. "size": 0 //0表示不查看原始数据
  11. }

创建映射关系

  1. PUT user/_mapping
  2. {
  3. "properties":{
  4. "name":{
  5. "type":"text",
  6. "index":true
  7. },
  8. "sex":{
  9. "type":"keyword",
  10. "index":true
  11. },
  12. "tel":{
  13. "type":"keyword",
  14. "index":false
  15. }
  16. }
  17. }

keyword不会被分词,
index是false,代表不能被索引,不支持用tel查询

分词器

  1. GET _analyze
  2. {
  3. "analyzer": "ik_max_word",
  4. "text": "我好帅"
  5. }