嵌套,相当于一个字段嵌套了一组文档。

创建索引:

  1. PUT my_index
  2. {
  3. "mappings": {
  4. "_doc": {
  5. "properties": {
  6. "user": {
  7. "type": "nested"
  8. }
  9. }
  10. }
  11. }
  12. }

添加数据:

  1. PUT my_index/_doc/1
  2. {
  3. "group" : "fans",
  4. "user" : [
  5. {
  6. "first" : "John",
  7. "last" : "Smith"
  8. },
  9. {
  10. "first" : "Alice",
  11. "last" : "White"
  12. }
  13. ]
  14. }

搜索成对的first和last,正确返回结果:

  1. GET my_index/_search
  2. {
  3. "query": {
  4. "nested": {
  5. "path": "user",
  6. "query": {
  7. "bool": {
  8. "must": [
  9. { "match": { "user.first": "Alice" }},
  10. { "match": { "user.last": "White" }}
  11. ]
  12. }
  13. },
  14. "inner_hits": {
  15. "highlight": {
  16. "fields": {
  17. "user.first": {}
  18. }
  19. }
  20. }
  21. }
  22. }
  23. }

inner_hits 允许我们突出显示匹配的嵌套文档。

返回结果:

  1. {
  2. "took": 60,
  3. "timed_out": false,
  4. "_shards": {
  5. "total": 5,
  6. "successful": 5,
  7. "skipped": 0,
  8. "failed": 0
  9. },
  10. "hits": {
  11. "total": 1,
  12. "max_score": 1.3862944,
  13. "hits": [
  14. {
  15. "_index": "my_index",
  16. "_type": "_doc",
  17. "_id": "1",
  18. "_score": 1.3862944,
  19. "_source": {
  20. "group": "fans",
  21. "user": [
  22. {
  23. "first": "John",
  24. "last": "Smith"
  25. },
  26. {
  27. "first": "Alice",
  28. "last": "White"
  29. }
  30. ]
  31. },
  32. "inner_hits": {
  33. "user": {
  34. "hits": {
  35. "total": 1,
  36. "max_score": 1.3862944,
  37. "hits": [
  38. {
  39. "_index": "my_index",
  40. "_type": "_doc",
  41. "_id": "1",
  42. "_nested": {
  43. "field": "user",
  44. "offset": 1
  45. },
  46. "_score": 1.3862944,
  47. "_source": {
  48. "first": "Alice",
  49. "last": "White"
  50. },
  51. "highlight": {
  52. "user.first": [
  53. "<em>Alice</em>"
  54. ]
  55. }
  56. }
  57. ]
  58. }
  59. }
  60. }
  61. }
  62. ]
  63. }
  64. }
文档更新时间: 2020-03-12 10:40   作者:admin