1 基础

  1. index -> 数据库
  2. type ->
  3. document ->
  4. field ->
  5. -------------------------------------------------------------------
  6. 字段属性
  7. type
  8. String
  9. text -> 可分词,不能聚合
  10. keyword -> 可聚合,不能分词
  11. 数值类型
  12. long.integer.short.byte.double.float.half_float.scaled_float
  13. index
  14. true -> 会被索引,默认true
  15. false -> 不会被索引,如设置图片
  16. -------------------------------------------------------------------
  17. 创建数据库 a1 分片5 副本1
  18. PUT a1
  19. {
  20. "settings": {
  21. "number_of_shards": 5,
  22. "number_of_replicas": 1
  23. }
  24. }
  25. 查看数据库 a1
  26. GET a1
  27. 查看所有数据库
  28. GET *
  29. 删除数据库 a1
  30. DELETE a1

2 基础

  1. //在 a1 数据库中建表 student
  2. //建立字段 name(类型text 指定分词) age(类型integer)
  3. PUT a1/_mapping/student
  4. {
  5. "properties": {
  6. "name": {
  7. "type": "text",
  8. "analyzer": "ik_max_word"
  9. },
  10. "age": {
  11. "type": "integer"
  12. }
  13. }
  14. }
  15. 查看 a1 数据库中建立的表解构
  16. GET a1/_mapping
  17. 往表中添加数据
  18. POST a1/student
  19. {
  20. "name":"小米手机",
  21. "age":11
  22. }
  23. 查看 a1 数据库的全部数据
  24. _source -> 查询到的数据
  25. _id -> 文档的唯一标识
  26. GET a1/_search
  27. {
  28. "query":{
  29. "match_all": {}
  30. }
  31. }
  32. 自定义 _id 2 的数据
  33. POST a1/student/2
  34. {
  35. "name":"大米手机",
  36. "age":22
  37. }
  38. 如果添加字段 address 不存在就会自动创建
  39. POST a1/student/3
  40. {
  41. "name":"小米电视4K",
  42. "age":33,
  43. "address":"安徽阜阳晶宫大酒店101"
  44. }
  45. 修改数据如果对应 id 存在则删除之前的再添加 不存在则添加
  46. PUT a1/student/4
  47. {
  48. "name":"小米电脑",
  49. "age":44
  50. }
  51. 删除id=4的文档
  52. DELETE a1/student/4

3 基本查询

  1. 基本查询
  2. match_all
  3. 查询数据库 a1 所有数据
  4. GET a1/_search
  5. {
  6. "query": {
  7. "match_all": {}
  8. }
  9. }
  10. ---
  11. {
  12. "took": 4,//查询耗时4毫秒
  13. "timed_out": false,//没有超时
  14. "_shards": {//分片
  15. "total": 5,//一共5个
  16. "successful": 5,//成功5个
  17. "skipped": 0,//跳过0个
  18. "failed": 0//失败0个
  19. },
  20. "hits": {//查询到的数据
  21. "total": 3,//查询总条数
  22. "max_score": 1,//最大得分1
  23. "hits": [//查询到的数据所有文档
  24. {//一个文档
  25. "_index": "a1",//数据库
  26. "_type": "student",//表
  27. "_id": "2",//注解 每个文档的唯一标识
  28. "_score": 1,//得分是1 满分是最大得分
  29. "_source": {//查询到的数据 包括 字段 字段值 -> k:v
  30. "name": "大米手机",
  31. "age": 22
  32. }
  33. },
  34. {
  35. "_index": "a1",
  36. "_type": "student",
  37. "_id": "CA2Yqm0Bmr19jrNQ7nRL",
  38. "_score": 1,
  39. "_source": {
  40. "name": "小米手机",
  41. "age": 11
  42. }
  43. },
  44. {
  45. "_index": "a1",
  46. "_type": "student",
  47. "_id": "3",
  48. "_score": 1,
  49. "_source": {
  50. "name": "小米电视4K",
  51. "age": 33,
  52. "address": "安徽阜阳小米酒店101"
  53. }
  54. }
  55. ]
  56. }
  57. }
  58. ---
  59. match
  60. 查询 name=小米电视
  61. 因为使用了分词,默认是or 所以可匹配 -> 小米 or 电视
  62. GET a1/_search
  63. {
  64. "query": {
  65. "match": {
  66. "name": "小米电视"
  67. }
  68. }
  69. }
  70. 查询分词,指定and可匹配 -> 小米 and 电视
  71. GET a1/_search
  72. {
  73. "query": {
  74. "match": {
  75. "name": {
  76. "query": "小米电视",
  77. "operator": "and"
  78. }
  79. }
  80. }
  81. }
  82. 可以指定分词的个数,
  83. 1 -> 匹配任意一个词
  84. 2 -> 匹配任意两个词
  85. 3 -> 因为超过了分词量,所以匹配不到
  86. GET a1/_search
  87. {
  88. "query": {
  89. "match": {
  90. "name": {
  91. "query": "小米电视",
  92. "minimum_should_match": 1
  93. }
  94. }
  95. }
  96. }
  97. 3x0.66=1.98,因为1.98<2 所以匹配任意一个
  98. GET a1/_search
  99. {
  100. "query": {
  101. "match": {
  102. "name": {
  103. "query": "小米智能电视",
  104. "minimum_should_match": "66%"
  105. }
  106. }
  107. }
  108. }
  109. 3x0.67=2.01,因为2.01>2 所以匹配任意两个
  110. GET a1/_search
  111. {
  112. "query": {
  113. "match": {
  114. "name": {
  115. "query": "小米智能电视",
  116. "minimum_should_match": "67%"
  117. }
  118. }
  119. }
  120. }
  121. 查询 name address 含有"小米"这个词
  122. GET a1/_search
  123. {
  124. "query": {
  125. "multi_match": {
  126. "query": "小米",
  127. "fields": ["name","address"]
  128. }
  129. }
  130. }
  131. 精准匹配 age=11
  132. GET a1/_search
  133. {
  134. "query": {
  135. "term": {
  136. "age": {
  137. "value": 11
  138. }
  139. }
  140. }
  141. }
  142. 多条精准匹配 age in [11,22,77]
  143. GET a1/_search
  144. {
  145. "query": {
  146. "terms": {
  147. "age": [11,22,77]
  148. }
  149. }
  150. }

4 结果过滤

  1. 结果过滤
  2. 查询字段只显示 name age
  3. 并且查询 age in [11,22,77]
  4. GET a1/_search
  5. {
  6. "_source": ["name","age"],
  7. "query": {
  8. "terms": {
  9. "age": [11,22,77]
  10. }
  11. }
  12. }
  13. 查询所有 只显示"address"字段,没有此字段的显示空
  14. GET a1/_search
  15. {
  16. "_source": {
  17. "includes": ["address"]
  18. }
  19. }
  20. 查询所有只除了"address"字段,其他全显示
  21. GET a1/_search
  22. {
  23. "_source": {
  24. "excludes": ["address"]
  25. }
  26. }

5 高级查询

  1. 高级查询
  2. must[{1},{2}] 满足所有
  3. 查询"name"分词有"小米"并且"age"等于11或者22
  4. GET a1/_search
  5. {
  6. "query": {
  7. "bool": {
  8. "must": [
  9. {
  10. "match": {
  11. "name": "小米"
  12. }
  13. },
  14. {
  15. "terms": {
  16. "age": [11,22]
  17. }
  18. }
  19. ]
  20. }
  21. }
  22. }
  23. must_not[{1},{2}] 不满足所有
  24. 查询"name"分词没有"小米并且"age"不等于11或者22
  25. GET a1/_search
  26. {
  27. "query": {
  28. "bool": {
  29. "must_not": [
  30. {
  31. "match": {
  32. "name": "小米"
  33. }
  34. },
  35. {
  36. "terms": {
  37. "age": [11,22]
  38. }
  39. }
  40. ]
  41. }
  42. }
  43. }
  44. 或 should[{1},{2}] 满足任意一个
  45. GET a1/_search
  46. {
  47. "query": {
  48. "bool": {
  49. "should": [
  50. {
  51. "match": {
  52. "name": "小米"
  53. }
  54. },
  55. {
  56. "terms": {
  57. "age": [11,22]
  58. }
  59. }
  60. ]
  61. }
  62. }
  63. }
  64. > >= < <=
  65. lt lte gt gte
  66. 查询 10<=age<30
  67. GET a1/_search
  68. {
  69. "query": {
  70. "range": {
  71. "age": {
  72. "gte": 10,
  73. "lt": 30
  74. }
  75. }
  76. }
  77. }

6 过滤

  1. 过滤
  2. 查询"name"=小米并且10<=age<=20
  3. GET a1/_search
  4. {
  5. "query": {
  6. "bool": {
  7. "must": [
  8. {
  9. "match": {
  10. "name": "小米"
  11. }
  12. }
  13. ],
  14. "filter": {
  15. "range": {
  16. "age": {
  17. "gte": 10,
  18. "lte": 20
  19. }
  20. }
  21. }
  22. }
  23. }
  24. }
  25. 排序
  26. 查询"name"=小米并按照年龄降序
  27. GET a1/_search
  28. {
  29. "query": {
  30. "match": {
  31. "name": "小米"
  32. }
  33. },
  34. "sort": [
  35. {
  36. "age": {
  37. "order": "desc"
  38. }
  39. }
  40. ]
  41. }

7 聚合

  1. 聚合
  2. select count(color)//指标 -> 对桶计算
  3. from table
  4. group by color//桶 -> 满足条件的文档集合
  5. 1.通过国家划分文档(桶)
  6. 2.然后通过性别划分每个国家(桶)
  7. 3.然后通过年龄区间划分每种性别(桶)
  8. 4.最后,为每个年龄区间计算平均薪酬(指标)
  9. 所有的这些都在一个请求内完成并且只遍历一次数据!
  10. PUT /cars
  11. {
  12. "settings": {
  13. "number_of_shards": 1,
  14. "number_of_replicas": 0
  15. },
  16. "mappings": {
  17. "transactions": {
  18. "properties": {
  19. "color": {
  20. "type": "keyword"
  21. },
  22. "make": {
  23. "type": "keyword"
  24. }
  25. }
  26. }
  27. }
  28. }
  29. 执行这一条 先执行上一条
  30. POST /cars/transactions/_bulk
  31. { "index": {}}
  32. { "price" : 10000, "color" : "red", "make" : "honda", "sold" : "2014-10-28" }
  33. { "index": {}}
  34. { "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
  35. { "index": {}}
  36. { "price" : 30000, "color" : "green", "make" : "ford", "sold" : "2014-05-18" }
  37. { "index": {}}
  38. { "price" : 15000, "color" : "blue", "make" : "toyota", "sold" : "2014-07-02" }
  39. { "index": {}}
  40. { "price" : 12000, "color" : "green", "make" : "toyota", "sold" : "2014-08-19" }
  41. { "index": {}}
  42. { "price" : 20000, "color" : "red", "make" : "honda", "sold" : "2014-11-05" }
  43. { "index": {}}
  44. { "price" : 80000, "color" : "red", "make" : "bmw", "sold" : "2014-01-01" }
  45. { "index": {}}
  46. { "price" : 25000, "color" : "blue", "make" : "ford", "sold" : "2014-02-12" }
  47. ---1 -> 尝试聚合 terms
  48. 按照"color"聚合 聚合名称为"popular_colors"
  49. GET /cars/_search
  50. {
  51. "size" : 0,
  52. "aggs" : {
  53. "popular_colors" : {
  54. "terms" : {"field" : "color"}
  55. }
  56. }
  57. }
  58. 聚合结果 -> 红色汽车卖的最好
  59. hits 结果为空,因为我们设置size:0
  60. aggregations 聚合结果
  61. popular_colors 聚合名称
  62. buckets 桶的集合
  63. key 这个桶对应"color"的值
  64. doc_count 这个桶中文档数量
  65. {
  66. "took": 3,
  67. "timed_out": false,
  68. "_shards": {
  69. "total": 1,
  70. "successful": 1,
  71. "skipped": 0,
  72. "failed": 0
  73. },
  74. "hits": {
  75. "total": 8,//查询到全部8条
  76. "max_score": 0,
  77. "hits": []//显示0条 设置了 size=0
  78. },
  79. "aggregations": {
  80. "popular_colors": {
  81. "doc_count_error_upper_bound": 0,
  82. "sum_other_doc_count": 0,
  83. "buckets": [
  84. {
  85. "key": "red",
  86. "doc_count": 4
  87. },
  88. {
  89. "key": "blue",
  90. "doc_count": 2
  91. },
  92. {
  93. "key": "green",
  94. "doc_count": 2
  95. }
  96. ]
  97. }
  98. }
  99. }
  100. ---2 -> 添加度量指标 avg
  101. 对聚合后的桶再进行度量算平均值
  102. GET cars/_search
  103. {
  104. "size": 0,
  105. "aggs": {
  106. "popular_colors": {
  107. "terms": {"field": "color"},
  108. "aggs": {
  109. "avg_price": {
  110. "avg": {"field": "price"}
  111. }
  112. }
  113. }
  114. }
  115. }
  116. 聚合结果 -> 红色汽车平均价格最贵
  117. ...
  118. "aggregations": {
  119. "popular_colors": {
  120. "doc_count_error_upper_bound": 0,
  121. "sum_other_doc_count": 0,
  122. "buckets": [
  123. {
  124. "key": "red",
  125. "doc_count": 4,
  126. "avg_price": {
  127. "value": 32500
  128. }
  129. },
  130. {
  131. "key": "blue",
  132. "doc_count": 2,
  133. "avg_price": {
  134. "value": 20000
  135. }
  136. },
  137. {
  138. "key": "green",
  139. "doc_count": 2,
  140. "avg_price": {
  141. "value": 21000
  142. }
  143. }
  144. ]
  145. }
  146. }
  147. ...
  148. ---3 -> 嵌套桶 terms avg terms
  149. 对聚合的结果再次进行聚合,桶嵌套桶
  150. GET /cars/_search
  151. {
  152. "size" : 0,
  153. "aggs" : {
  154. "popular_colors" : {
  155. "terms" : {"field" : "color"},
  156. "aggs":{
  157. "avg_price": {
  158. "avg": {"field": "price"}
  159. },
  160. "maker":{
  161. "terms":{"field":"make"}
  162. }
  163. }
  164. }
  165. }
  166. }
  167. 聚合结果 -> 每种颜色的各个车型卖出去多少量
  168. + 原来的color桶和avg计算我们不变
  169. + maker:在嵌套的aggs下新添一个桶,叫做maker
  170. + terms:桶的划分类型依然是词条
  171. + filed:这里根据make字段进行划分
  172. ...
  173. "aggregations": {
  174. "popular_colors": {
  175. "doc_count_error_upper_bound": 0,
  176. "sum_other_doc_count": 0,
  177. "buckets": [
  178. {
  179. "key": "red",
  180. "doc_count": 4,
  181. "maker": {
  182. "doc_count_error_upper_bound": 0,
  183. "sum_other_doc_count": 0,
  184. "buckets": [
  185. {
  186. "key": "honda",
  187. "doc_count": 3
  188. },
  189. {
  190. "key": "bmw",
  191. "doc_count": 1
  192. }
  193. ]
  194. },
  195. "avg_price": {
  196. "value": 32500
  197. }
  198. },
  199. {
  200. "key": "blue",
  201. ...
  202. },
  203. {
  204. "key": "green",
  205. ...
  206. }
  207. ]
  208. }
  209. }
  210. ...
  211. ---4 -> 最后的修改 terms avg min max terms terms
  212. 1>
  213. 一共有多少种颜色
  214. 每种颜色卖多少辆车
  215. 每种颜色平均价格是多少
  216. 2>
  217. 每种颜色都是什么车
  218. 每种车有多少辆
  219. 3>
  220. 每种车价格是多少
  221. GET /cars/_search
  222. {
  223. "size" : 0,
  224. "aggs" : {
  225. "popular_colors" : {
  226. "terms" : { "field" : "color"},
  227. "aggs":{
  228. "avg_price": {
  229. "avg": { "field": "price" }
  230. },
  231. "min_price":{
  232. "min": {"field": "price"}
  233. },
  234. "max_price":{
  235. "max": {"field": "price"}
  236. },
  237. "maker":{
  238. "terms":{"field":"make"},
  239. "aggs": {
  240. "a_price": {
  241. "terms": {"field": "price" }
  242. }
  243. }
  244. }
  245. }
  246. }
  247. }
  248. }
  249. 聚合结果
  250. 其中红色汽车4
  251. 红色最贵80000 最便宜10000
  252. 其中3honda本田 1bmw
  253. 其中本田20000 2 本田100001 宝马bmw80000 卖一辆
  254. ...
  255. "aggregations": {
  256. "popular_colors": {
  257. "doc_count_error_upper_bound": 0,
  258. "sum_other_doc_count": 0,
  259. "buckets": [
  260. {
  261. "key": "red",
  262. "doc_count": 4,
  263. "max_price": {
  264. "value": 80000
  265. },
  266. "min_price": {
  267. "value": 10000
  268. },
  269. "maker": {
  270. "doc_count_error_upper_bound": 0,
  271. "sum_other_doc_count": 0,
  272. "buckets": [
  273. {
  274. "key": "honda",
  275. "doc_count": 3,
  276. "a_price": {
  277. "doc_count_error_upper_bound": 0,
  278. "sum_other_doc_count": 0,
  279. "buckets": [
  280. {
  281. "key": 20000,
  282. "doc_count": 2
  283. },
  284. {
  285. "key": 10000,
  286. "doc_count": 1
  287. }
  288. ]
  289. }
  290. },
  291. {
  292. "key": "bmw",
  293. "doc_count": 1,
  294. "a_price": {
  295. "doc_count_error_upper_bound": 0,
  296. "sum_other_doc_count": 0,
  297. "buckets": [
  298. {
  299. "key": 80000,
  300. "doc_count": 1
  301. }
  302. ]
  303. }
  304. }
  305. ]
  306. },
  307. "avg_price": {
  308. "value": 32500
  309. }
  310. },
  311. {
  312. "key": "blue",
  313. ...
  314. },
  315. {
  316. "key": "green",
  317. ...
  318. }
  319. ]
  320. }
  321. }
  322. ...
  323. ---5 -> 条形图 histogram interval
  324. 聚合名称"a_price"
  325. 根据字段"price"进行5000一次分割
  326. 从最小到最大,例如
  327. [-1,1,4999,5000,5001,10000,10001] ->
  328. [-5000,0) -> -1
  329. [0,5000) -> 1 4999
  330. [5000,10000) -> 5000 5001
  331. [10000,15000) -> 10000 10001
  332. key=0 [0,5000)
  333. key=5000 [5000,10000)
  334. GET /cars/_search
  335. {
  336. "size":0,
  337. "aggs":{
  338. "a_price":{
  339. "histogram": {
  340. "field": "price",
  341. "interval": 5000
  342. }
  343. }
  344. }
  345. }
  346. 聚合结果
  347. ...
  348. "aggregations": {
  349. "a_price": {
  350. "buckets": [
  351. {
  352. "key": 10000,
  353. "doc_count": 2
  354. },
  355. {
  356. "key": 15000,
  357. "doc_count": 1
  358. },
  359. {
  360. "key": 20000,
  361. "doc_count": 2
  362. },
  363. {
  364. "key": 25000,
  365. "doc_count": 1
  366. },
  367. {
  368. "key": 30000,
  369. "doc_count": 1
  370. },
  371. {
  372. "key": 35000,
  373. "doc_count": 0
  374. },
  375. {
  376. "key": 40000,
  377. "doc_count": 0
  378. },
  379. {
  380. "key": 45000,
  381. "doc_count": 0
  382. },
  383. {
  384. "key": 50000,
  385. "doc_count": 0
  386. },
  387. {
  388. "key": 55000,
  389. "doc_count": 0
  390. },
  391. {
  392. "key": 60000,
  393. "doc_count": 0
  394. },
  395. {
  396. "key": 65000,
  397. "doc_count": 0
  398. },
  399. {
  400. "key": 70000,
  401. "doc_count": 0
  402. },
  403. {
  404. "key": 75000,
  405. "doc_count": 0
  406. },
  407. {
  408. "key": 80000,
  409. "doc_count": 1
  410. }
  411. ]
  412. }
  413. }
  414. ...
  415. ---6 -> 条形图 histogram interval min_doc_count
  416. 最少有一条记录
  417. GET /cars/_search
  418. {
  419. "size":0,
  420. "aggs":{
  421. "a_price":{
  422. "histogram": {
  423. "field": "price",
  424. "interval": 5000,
  425. "min_doc_count": 1
  426. }
  427. }
  428. }
  429. }
  430. 聚合结果
  431. ...
  432. "aggregations": {
  433. "a_price": {
  434. "buckets": [
  435. {
  436. "key": 10000,
  437. "doc_count": 2
  438. },
  439. {
  440. "key": 15000,
  441. "doc_count": 1
  442. },
  443. {
  444. "key": 20000,
  445. "doc_count": 2
  446. },
  447. {
  448. "key": 25000,
  449. "doc_count": 1
  450. },
  451. {
  452. "key": 30000,
  453. "doc_count": 1
  454. },
  455. {
  456. "key": 80000,
  457. "doc_count": 1
  458. }
  459. ]
  460. }
  461. }
  462. ...
  463. ---7 -> 按时间统计 date_histogram interval format min_doc_count
  464. 按月分割 至少匹配一条
  465. GET /cars/transactions/_search
  466. {
  467. "size" : 0,
  468. "aggs": {
  469. "sales": {
  470. "date_histogram": {
  471. "field": "sold",
  472. "interval": "month",
  473. "format": "yyyy-MM-dd",
  474. "min_doc_count": 1
  475. }
  476. }
  477. }
  478. }
  479. 聚合结果
  480. ...
  481. "aggregations": {
  482. "sales": {
  483. "buckets": [
  484. {
  485. "key_as_string": "2014-01-01",
  486. "key": 1388534400000,
  487. "doc_count": 1
  488. },
  489. {
  490. "key_as_string": "2014-02-01",
  491. "key": 1391212800000,
  492. "doc_count": 1
  493. },
  494. {
  495. "key_as_string": "2014-05-01",
  496. "key": 1398902400000,
  497. "doc_count": 1
  498. },
  499. {
  500. "key_as_string": "2014-07-01",
  501. "key": 1404172800000,
  502. "doc_count": 1
  503. },
  504. {
  505. "key_as_string": "2014-08-01",
  506. "key": 1406851200000,
  507. "doc_count": 1
  508. },
  509. {
  510. "key_as_string": "2014-10-01",
  511. "key": 1412121600000,
  512. "doc_count": 1
  513. },
  514. {
  515. "key_as_string": "2014-11-01",
  516. "key": 1414800000000,
  517. "doc_count": 2
  518. }
  519. ]
  520. }
  521. }
  522. ...
  523. ---8 -> 返回空桶 date_histogram interval format min_doc_count extended_bounds min max
  524. 按月分割查询整年的数据 查询一共12 用于做统计图之类的
  525. 如果数据只到11 则不会显示12月,就需要加extended_bounds用来限制整年
  526. GET /cars/transactions/_search
  527. {
  528. "size" : 0,
  529. "aggs": {
  530. "sales": {
  531. "date_histogram": {
  532. "field": "sold",
  533. "interval": "month",
  534. "format": "yyyy-MM-dd",
  535. "min_doc_count" : 0,
  536. "extended_bounds" : {
  537. "min" : "2014-01-01",
  538. "max" : "2014-12-31"
  539. }
  540. }
  541. }
  542. }
  543. }
  544. 聚合结果
  545. ...
  546. "aggregations": {
  547. "sales": {
  548. "buckets": [
  549. {
  550. "key_as_string": "2014-01-01",
  551. "key": 1388534400000,
  552. "doc_count": 1
  553. },
  554. {
  555. "key_as_string": "2014-02-01",
  556. "key": 1391212800000,
  557. "doc_count": 1
  558. },
  559. {
  560. "key_as_string": "2014-03-01",
  561. "key": 1393632000000,
  562. "doc_count": 0
  563. },
  564. {
  565. "key_as_string": "2014-04-01",
  566. "key": 1396310400000,
  567. "doc_count": 0
  568. },
  569. {
  570. "key_as_string": "2014-05-01",
  571. "key": 1398902400000,
  572. "doc_count": 1
  573. },
  574. {
  575. "key_as_string": "2014-06-01",
  576. "key": 1401580800000,
  577. "doc_count": 0
  578. },
  579. {
  580. "key_as_string": "2014-07-01",
  581. "key": 1404172800000,
  582. "doc_count": 1
  583. },
  584. {
  585. "key_as_string": "2014-08-01",
  586. "key": 1406851200000,
  587. "doc_count": 1
  588. },
  589. {
  590. "key_as_string": "2014-09-01",
  591. "key": 1409529600000,
  592. "doc_count": 0
  593. },
  594. {
  595. "key_as_string": "2014-10-01",
  596. "key": 1412121600000,
  597. "doc_count": 1
  598. },
  599. {
  600. "key_as_string": "2014-11-01",
  601. "key": 1414800000000,
  602. "doc_count": 2
  603. },
  604. {
  605. "key_as_string": "2014-12-01",
  606. "key": 1417392000000,
  607. "doc_count": 0
  608. }
  609. ]
  610. }
  611. }
  612. ...
  613. ---9 -> 时间统计 扩展案例 date_histogram interval format min_doc_count extended_bounds min max terms sum
  614. 按照季度进行划分全年 分为4个季度
  615. 每个季度卖了多少钱
  616. 每个季度每种车卖了多少辆 每种车卖多少钱
  617. GET /cars/transactions/_search
  618. {
  619. "size" : 0,
  620. "aggs": {
  621. "sales": {
  622. "date_histogram": {
  623. "field": "sold",
  624. "interval": "quarter",
  625. "format": "yyyy-MM-dd",
  626. "min_doc_count" : 0,
  627. "extended_bounds" : {
  628. "min" : "2014-01-01",
  629. "max" : "2014-12-31"
  630. }
  631. },
  632. "aggs": {
  633. "per_make_sum": {
  634. "terms": {"field": "make"},
  635. "aggs": {
  636. "sum_price": {"sum": { "field": "price" }}
  637. }
  638. },
  639. "total_sum": {"sum": { "field": "price" }}
  640. }
  641. }
  642. }
  643. }
  644. 聚合结果
  645. 第一季度[2014-01-01,2014-04-01) 共卖了2辆车 卖了105000
  646. 其中1bmw宝马 80000 1ford福特 25000
  647. ...
  648. "aggregations": {
  649. "sales": {
  650. "buckets": [
  651. {
  652. "key_as_string": "2014-01-01",
  653. "key": 1388534400000,
  654. "doc_count": 2,
  655. "per_make_sum": {
  656. "doc_count_error_upper_bound": 0,
  657. "sum_other_doc_count": 0,
  658. "buckets": [
  659. {
  660. "key": "bmw",
  661. "doc_count": 1,
  662. "sum_price": {
  663. "value": 80000
  664. }
  665. },
  666. {
  667. "key": "ford",
  668. "doc_count": 1,
  669. "sum_price": {
  670. "value": 25000
  671. }
  672. }
  673. ]
  674. },
  675. "total_sum": {
  676. "value": 105000
  677. }
  678. },
  679. {
  680. "key_as_string": "2014-04-01",
  681. ...
  682. },
  683. {
  684. "key_as_string": "2014-07-01",
  685. ...
  686. },
  687. {
  688. "key_as_string": "2014-10-01",
  689. ...
  690. }
  691. ]
  692. }
  693. }
  694. ...
  695. ---10 -> stats 包括 count min max avg sum
  696. GET cars/_search
  697. {
  698. "size": 0,
  699. "aggs": {
  700. "price": {
  701. "stats": {"field": "price"}
  702. }
  703. }
  704. }
  705. 聚合结果
  706. ...
  707. "aggregations": {
  708. "price": {
  709. "count": 8,
  710. "min": 10000,
  711. "max": 80000,
  712. "avg": 26500,
  713. "sum": 212000
  714. }
  715. }
  716. ...

8 聚合

  1. GET /cars/transactions/_search
  2. {
  3. "size" : 0,
  4. "aggs" : {
  5. "colors" : {
  6. "terms" : {"field" : "color"}
  7. }
  8. }
  9. }
  10. 上等价于下
  11. GET /cars/transactions/_search
  12. {
  13. "size" : 0,
  14. "query" : {
  15. "match_all" : {}
  16. },
  17. "aggs" : {
  18. "colors" : {
  19. "terms" : {"field" : "color"}
  20. }
  21. }
  22. }
  23. ---1 -> 范围限定的聚合 query match aggs avg
  24. 对查询的结果进行聚合
  25. GET cars/_search
  26. {
  27. "size": 0,
  28. "query": {
  29. "match": {"make": "ford"}
  30. },
  31. "aggs": {
  32. "avg_1": {
  33. "avg": {"field": "price"}
  34. }
  35. }
  36. }
  37. 聚合结果
  38. ...
  39. "aggregations": {
  40. "avg_1": {
  41. "value": 27500//对查询到的结果进行求平均值
  42. }
  43. }
  44. ...
  45. ---2 -> 范围限定的聚合 query match aggs avg global aggs avg
  46. 对查询的结果进行聚合 并对全部数据也进行聚合
  47. GET cars/_search
  48. {
  49. "size": 0,
  50. "query": {
  51. "match": {"make": "ford"}
  52. },
  53. "aggs": {
  54. "avg_1": {//对查询的结果进行聚合
  55. "avg": {"field": "price"}
  56. },
  57. "all":{//聚合桶名称
  58. "global": {},
  59. "aggs": {
  60. "avg_2": {//对全部数据求平均值的桶
  61. "avg": {"field": "price"}
  62. }
  63. }
  64. }
  65. }
  66. }
  67. 聚合结果
  68. ...
  69. "aggregations": {
  70. "all": {
  71. "doc_count": 8,
  72. "avg_2": {
  73. "value": 26500
  74. }
  75. },
  76. "avg_1": {
  77. "value": 27500
  78. }
  79. }
  80. ...
  81. ---3 -> 过滤 query constant_score filter range aggs avg
  82. 使用"constant_score""filter"进行过滤,再对过滤的结果进行聚合
  83. GET /cars/transactions/_search
  84. {
  85. "size" : 0,
  86. "query" : {
  87. "constant_score": {
  88. "filter": {
  89. "range": {
  90. "price": {"gte": 30000}
  91. }
  92. }
  93. }
  94. },
  95. "aggs" : {
  96. "single_avg_price": {
  97. "avg" : { "field" : "price" }
  98. }
  99. }
  100. }
  101. 聚合结果
  102. ...
  103. "aggregations": {
  104. "single_avg_price": {
  105. "value": 55000
  106. }
  107. }
  108. ...
  109. ---4 -> 过滤桶 query match aggs filter range aggs avg
  110. 对查询结果进行过滤(现在时间的前一个月)再进行计算平均值
  111. GET /cars/transactions/_search
  112. {
  113. "size" : 0,
  114. "query":{
  115. "match": {"make": "ford"}
  116. },
  117. "aggs":{
  118. "recent_sales": {
  119. "filter": {
  120. "range": {"sold": {"from": "now-1M"}}
  121. },
  122. "aggs": {
  123. "average_price":{"avg": {"field": "price"}}
  124. }
  125. }
  126. }
  127. }
  128. 聚合结果
  129. ...
  130. "aggregations": {
  131. "recent_sales": {
  132. "meta": {},
  133. "doc_count": 0,
  134. "average_price": {
  135. "value": null
  136. }
  137. }
  138. }
  139. ...
  140. ---5 -> 后过滤器 query match post_filter term aggs terms
  141. "post_filter"只影响搜索结果"hits",不影响聚合结果"aggregations"
  142. GET /cars/transactions/_search
  143. {
  144. "size" : 0,
  145. "query": {
  146. "match": {"make": "ford"}
  147. },
  148. "post_filter": {
  149. "term" : {"color" : "green"}
  150. },
  151. "aggs" : {
  152. "all_colors": {
  153. "terms" : { "field" : "color" }
  154. }
  155. }
  156. }
  157. 聚合结果
  158. ...
  159. "hits": {
  160. "total": 1,//只有一条
  161. "max_score": 0,
  162. "hits": []
  163. },
  164. "aggregations": {
  165. "all_colors": {
  166. "doc_count_error_upper_bound": 0,
  167. "sum_other_doc_count": 0,
  168. "buckets": [
  169. {
  170. "key": "blue",
  171. "doc_count": 1
  172. },
  173. {
  174. "key": "green",
  175. "doc_count": 1
  176. }
  177. ]
  178. }
  179. }
  180. ...
  181. ---6 -> 内置排序 aggs terms order _count _term
  182. 桶默认按照"doc_count"降序
  183. 我们可以使用内置"order"排序
  184. _count
  185. "doc_count"大小排序。对 terms histogram date_histogram 有效。
  186. _term
  187. 按照"key"字母顺序排序。只在 terms 内使用。
  188. _key
  189. 按每个桶的键值数值排序(理论上与 _term 类似)。 只在 histogram date_histogram 内使用。
  190. GET cars/_search
  191. {
  192. "size": 0,
  193. "aggs": {
  194. "colors": {
  195. "terms": {
  196. "field": "color",
  197. "order": {
  198. "_count": "asc"
  199. }
  200. }
  201. }
  202. }
  203. }
  204. 聚合结果
  205. ...
  206. "aggregations": {
  207. "colors": {
  208. "doc_count_error_upper_bound": 0,
  209. "sum_other_doc_count": 0,
  210. "buckets": [
  211. {
  212. "key": "blue",
  213. "doc_count": 2
  214. },
  215. {
  216. "key": "green",
  217. "doc_count": 2
  218. },
  219. {
  220. "key": "red",
  221. "doc_count": 4
  222. }
  223. ]
  224. }
  225. }
  226. ...
  227. ---7 -> 按度量排序 aggs terms order aggs avg
  228. 按照计算的平均价格的桶名称进行平均价格升序
  229. GET /cars/transactions/_search
  230. {
  231. "size" : 0,
  232. "aggs" : {
  233. "makes" : {
  234. "terms" : {
  235. "field" : "make",
  236. "order": {"avg_price" : "asc" }
  237. },
  238. "aggs": {
  239. "avg_price": {"avg": {"field": "price"}}
  240. }
  241. }
  242. }
  243. }
  244. 聚合结果
  245. ...
  246. "aggregations": {
  247. "makes": {
  248. "doc_count_error_upper_bound": 0,
  249. "sum_other_doc_count": 0,
  250. "buckets": [
  251. {
  252. "key": "toyota",
  253. "doc_count": 2,
  254. "avg_price": {
  255. "value": 13500
  256. }
  257. },
  258. {
  259. "key": "honda",
  260. "doc_count": 3,
  261. "avg_price": {
  262. "value": 16666.666666666668
  263. }
  264. },
  265. {
  266. "key": "ford",
  267. "doc_count": 2,
  268. "avg_price": {
  269. "value": 27500
  270. }
  271. },
  272. {
  273. "key": "bmw",
  274. "doc_count": 1,
  275. "avg_price": {
  276. "value": 80000
  277. }
  278. }
  279. ]
  280. }
  281. }
  282. ...
  283. ---8 -> 按度量排序 aggs terms order aggs extended_stats
  284. 按照扩展统计的方差进行升序
  285. GET /cars/transactions/_search
  286. {
  287. "size" : 0,
  288. "aggs" : {
  289. "colors" : {
  290. "terms" : {
  291. "field" : "color",
  292. "order": {"stats.variance" : "asc" }
  293. },
  294. "aggs": {
  295. "stats": {"extended_stats": {"field": "price"}}
  296. }
  297. }
  298. }
  299. }
  300. 聚合结果
  301. ...
  302. "aggregations": {
  303. "colors": {
  304. "doc_count_error_upper_bound": 0,
  305. "sum_other_doc_count": 0,
  306. "buckets": [
  307. {
  308. "key": "blue",
  309. "doc_count": 2,
  310. "stats": {
  311. "count": 2,
  312. "min": 15000,
  313. "max": 25000,
  314. "avg": 20000,
  315. "sum": 40000,
  316. "sum_of_squares": 850000000,
  317. "variance": 25000000,
  318. "std_deviation": 5000,
  319. "std_deviation_bounds": {
  320. "upper": 30000,
  321. "lower": 10000
  322. }
  323. }
  324. },
  325. {
  326. "key": "green",
  327. ...
  328. },
  329. {
  330. "key": "red",
  331. ...
  332. }
  333. ]
  334. }
  335. }
  336. ...
  337. ---9 -> 基于"深度"度量排序 aggs histogram interval order aggs filter terms aggs extended_stats
  338. a2>a3.variance 表示"a2"中的"a3""variance"属性
  339. 按照价格两万一次分割,过滤了只取"red","green"一共6个文档,并且根据分割块进行价格计算扩展统计,
  340. 根据分割每一块的扩展统计的方差来升序排列,并且排除分割内至少数量为1
  341. 这里"a1"//单值桶 "a2"//多值桶 "a3"//度量指标
  342. GET cars/_search
  343. {
  344. "size": 0,
  345. "aggs": {
  346. "a1": {
  347. "histogram": {
  348. "field": "price",
  349. "interval": 20000,
  350. "min_doc_count": 1,
  351. "order": {"a2>a3.variance": "asc"}
  352. },
  353. "aggs": {
  354. "a2": {
  355. "filter": {
  356. "terms": {"color": ["red","green"]}
  357. },
  358. "aggs": {
  359. "a3": {
  360. "extended_stats": {"field": "price"}
  361. }
  362. }
  363. }
  364. }
  365. }
  366. }
  367. }
  368. 聚合结果
  369. ...
  370. "aggregations": {
  371. "a1": {//多值桶
  372. "buckets": [
  373. {
  374. "key": 80000,//[80000,100000)有1条
  375. "doc_count": 1,
  376. "a2": {//单值桶
  377. "doc_count": 1,//[80000,100000) 并且属于["red","green"]有1条
  378. "a3": {
  379. "count": 1,
  380. "min": 80000,
  381. "max": 80000,
  382. "avg": 80000,
  383. "sum": 80000,
  384. "sum_of_squares": 6400000000,
  385. "variance": 0,//属于["red","green"]1条的方差
  386. "std_deviation": 0,
  387. "std_deviation_bounds": {
  388. "upper": 80000,
  389. "lower": 80000
  390. }
  391. }
  392. }
  393. },
  394. {
  395. "key": 0,//[0,20000)有3条
  396. "doc_count": 3,
  397. "a2": {
  398. "doc_count": 2,//[0,20000) 并且属于["red","green"]有2条
  399. "a3": {
  400. ...
  401. "variance": 1000000,//属于["red","green"]2条的方差
  402. ...
  403. }
  404. }
  405. },
  406. {
  407. "key": 20000,//[20000,40000)有4条
  408. "doc_count": 4,
  409. "a2": {
  410. "doc_count": 3,//[20000,40000) 并且属于["red","green"]有3条
  411. "a3": {
  412. ...
  413. "variance": 22222222.22222225,//属于["red","green"]3条的方差
  414. ...
  415. }
  416. }
  417. }
  418. ]
  419. }
  420. }
  421. ...
  422. ---10 -> 统计去重后的数量 aggs cardinality
  423. GET /cars/transactions/_search
  424. {
  425. "size" : 0,
  426. "aggs" : {
  427. "distinct_colors" : {
  428. "cardinality" : {"field" : "color"}
  429. }
  430. }
  431. }
  432. 聚合结果
  433. ...
  434. "aggregations": {
  435. "distinct_colors": {
  436. "value": 3
  437. }
  438. }
  439. ...
  440. ---11 -> 统计去重后的数量 aggs date_histogram interval min_doc_count aggs cardinality
  441. 按日期每个月分割一次,至少一条才显示,每个月根据颜色都去重
  442. GET /cars/transactions/_search
  443. {
  444. "size" : 0,
  445. "aggs" : {
  446. "months" : {
  447. "date_histogram": {
  448. "field": "sold",
  449. "interval": "month",
  450. "min_doc_count": 1
  451. },
  452. "aggs": {
  453. "distinct_colors" : {
  454. "cardinality" : {"field" : "color"}
  455. }
  456. }
  457. }
  458. }
  459. }
  460. 聚合结果
  461. ...
  462. "aggregations": {
  463. "months": {
  464. "buckets": [
  465. ...
  466. {
  467. "key_as_string": "2014-08-01T00:00:00.000Z",
  468. "key": 1406851200000,
  469. "doc_count": 1,
  470. "distinct_colors": {
  471. "value": 1
  472. }
  473. },
  474. {
  475. "key_as_string": "2014-10-01T00:00:00.000Z",
  476. "key": 1412121600000,
  477. "doc_count": 1,
  478. "distinct_colors": {
  479. "value": 1
  480. }
  481. },
  482. {
  483. "key_as_string": "2014-11-01T00:00:00.000Z",
  484. "key": 1414800000000,
  485. "doc_count": 2,
  486. "distinct_colors": {
  487. "value": 1
  488. }
  489. }
  490. ]
  491. }
  492. }
  493. ...
  494. ---12 -> 统计去重后的数量 aggs cardinality precision_threshold
  495. GET /cars/transactions/_search
  496. {
  497. "size" : 0,
  498. "aggs" : {
  499. "distinct_colors" : {
  500. "cardinality" : {
  501. "field" : "color",
  502. "precision_threshold" : 100 //指定精度,范围[0,40000]超过四万也会为四万
  503. }
  504. }
  505. }
  506. }
  507. 聚合结果
  508. ...
  509. "aggregations": {
  510. "distinct_colors": {
  511. "value": 3
  512. }
  513. }
  514. ...

Elasticsearch没看文档之前,整理的一些知识的更多相关文章

  1. 用Word收集网页中的内容,用文档结构图整理

    如何用Word保存网页中的内容 网页中的内容,用什么保存好? 用笔记类软件是个不错的选择,还可以用 Word 保存,这样方便用“文档结构图”来整理网页. 如图:网页收集后用文档结构图进行整理. (图一 ...

  2. 看文档要看仔细,英语要加强啊... cocos2d-x 的 API 和 对应版本的 cocos2d-js 的 API 没有完全对应

    /** * Sets the X rotation (angle) of the node in degrees which performs a horizontal rotational skew ...

  3. Jeecg社区wiki在开放,最终能够在线看文档啦!!!

    Jeecg社区wiki在开放,最终能够在线看文档啦! .! 2014-12-18 scott JEECG jeecg开源社区wiki正式启动了.方便大家看文档 訪问地址是: http://osbaba ...

  4. python模块之httplib(在py3中功能进一步强大,请详看文档)

    # -*- coding: utf-8 -*-#python 27#xiaodeng#python模块之httplib(在py3中功能进一步强大,请详看文档) import httplib#是较为底层 ...

  5. Elasticsearch 7.x文档基本操作(CRUD)

    官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html 1.添加文档 1.1.指定文档ID PUT ...

  6. elasticsearch 基础 —— 分布式文档存储原理

    路由一个文档到一个分片中 当索引一个文档的时候,文档会被存储到一个主分片中. Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?当我们创建文档时,它如何决定这个文档应当被存储在分片  ...

  7. elasticsearch 官方监控文档 老版但很有用

    https://zhaoyanblog.com/page/1?s=elasticsearch 监控每个节点(jvm部分) 操作系统和进程部分 操作系统和进程部分的含义是很清楚的,这里不会描述的很详细. ...

  8. 关于Elasticsearch单个索引文档最大数量问题

    因为ElasticSearch是一个基于Lucene的搜索服务器.Lucene的索引有个难以克服的限制,导致Elasticsearch的单个分片存在最大文档数量限制,一个索引分片的最大文档数量是20亿 ...

  9. Niagara帮助文档资料整理

    1.任何软件额发布都会有说明文档,有的不会附具体实践的操作步骤,存在不懂得问题一般可以通过查看榜文文档解决问题 一些软件的帮助文档是一PDF格式存储在软件安装的目录下面,如Niagar workben ...

随机推荐

  1. js闭包解决多个点击事件

    <script> var severalObj=window.document.getElementsByName("button"); for(var i=0;i&l ...

  2. Leaflet - 自定义弹出框(popup)

    有两种方法,一种直接改 CSS,一种是通过继承拓展 popup. 方法一:改 CSS 下面是一个将原有样式清空的设置(可能清的不全,只是提供个思路) .l-popup { &--no-styl ...

  3. 【React自制全家桶】八、React动画以及react-transition-group动画库的使用

    React动画通常有三种方法实现从易到难为: 1.transition(CSS3自带) 2.animation(CSS3自带) 3.react-transition-group动画库(需要引入插件) ...

  4. SQL SERVER 数据库安装完毕之后如何修改数据库实例排序规则

    背景 最近我们在azure portal 上开了几台英文版的数据库服务器,因默认是开启就安装好对应的数据库,所以存在一个实例排序规则的问题,需把整个实例都调整成Chinese_PRC_CI_AS,避免 ...

  5. 提交SVN Working copy locked解决

    今天一大早提交SVN的时候,出现这个错误: 百度了一下原因:因为我强制在commit的时候退出了,导致svn项目文件被锁了,不能commit,不能update了 赶紧百度了一下解决办法: http:/ ...

  6. python网络编程(Socket、TCP、UDP)

    Socket 是网络编程的一个抽象概念,通常我们用一个Socket表示 "打开了一个网络链接",而打开一个Socket 需要知道目标计算机的IP 地址和端口号,再指定协议类型即可. ...

  7. WDM-波分复用

    波分复用WDM(Wavelength Division Multiplexing)是将两种或多种不同波长的光载波信号(携带各种信息)在发送端经复用器(亦称合波器,Multiplexer)汇合在一起,并 ...

  8. 使用torchvision下载数据集显示没有模板

    配置: Anaconda+Windows+py3.7 一:首先先卸载开始的torchvision:pip uninstall torchvision 二:找到官网:https://pypi.org/p ...

  9. AttributeError: module 'html.parser' has no attribute 'HTMLParseError'

    别人说这种错误大多是,因为beautifulsoup的版本兼容问题, 因为beautifulsoup的4.0以下版本和4.0版本与python3.5以上都不兼容, 网上的解决方案大多是:降python ...

  10. 【Python基础】lpthw - Exercise 46 项目骨架

    本节将会介绍如何构建一个项目骨架目录.骨架目录中会包含项目文件布局.自动测试代码.模块及安装脚本. 一.环境配置(win10) 1. 检查并确认自己只安装了一个python版本. cd ~ pytho ...