当前位置:   article > 正文

elasticsearch笔记——嵌套查询_es 嵌套字段的prefix query

es 嵌套字段的prefix query

      elasticsearch 为了实现水平规模扩展,提供了以下两种形式的查询:

一、nested

      文档中可能包含嵌套类型的字段,这些字段用来索引一些数组对象,每个对象都可以作为一条独立的文档被查询出来。

  1. {
  2. "mappings": {
  3. "<type>": {
  4. "properties": {
  5. "user": {"type": "nested"}
  6. }
  7. }
  8. }
  9. }
  10. 插入的数据:
  11. {
  12. "user": [
  13. {
  14. "first": "John",
  15. "last": "Smith"
  16. },
  17. {
  18. "first": "Alice",
  19. "last": "White"
  20. }
  21. ]
  22. }
  23. 如果字段user的类型采用object,那么添加的数据会扁平化,数据结构会变为:
  24. {
  25. "user.first": ["John", "Alice"],
  26. "user.last": ["Smith", "White"]
  27. }
  28. 使用以下搜索,上面两条文档就都会被搜索到,而这不是我们想要的:
  29. {
  30. "query": {
  31. "bool": {
  32. "must": {
  33. "match": {"user.first": "John"},
  34. "match": {"user.last": "Smith"}
  35. }
  36. }
  37. }
  38. }
  39. 如果采用nested类型,会保持数组中每个对象的独立性,使用上面的搜索,只会搜索到一条文档。

二、has_child  和   has_parent 

      has_child:通过子文档查询父文档;

      has_parent:通过父文档查询子文档。

      为了很好的表达清楚,我们构建以下模型:

  1. employee 是 child type;branch 是 parent type
  2. {
  3. "mappings": {
  4. "branch": {
  5. "properties": {
  6. "name": {"type": "text"},
  7. "city": {"type": "text"},
  8. "country": {"type": "text"}
  9. }
  10. },
  11. "employee": {
  12. "_parent": {"type": "branch"},
  13. "properties": {
  14. "name": {"type": "text"},
  15. "dob": {"type": "text"},
  16. "hobby": {"type": "text"}
  17. }
  18. }
  19. }
  20. }
  21. 给 branch 插入数据:
  22. { "index" : { "_id": "london" }}
  23. { "name" : "London Westminster", "city" : "London", "country" : "UK" }
  24. { "index" : { "_id": "liverpool" }}
  25. { "name" : "Liverpool Central", "city" : "liverpool", "country" : "UK" }
  26. { "index" : { "_id": "paris" }}
  27. { "name" : "Champs Elysees", "city" : "Paris", "country" : "France" }
  28. 给 employee 插入数据:
  29. { "index" : { "_id" :1, "parent" : "london" }}
  30. { "name" : "Alice Smith", "dob" : "1970-10-24", "hobby" : "hiking"}
  31. { "index" : { "_id" :2, "parent" : "london" }}
  32. { "name" : "Mark Thomas", "dob" : "1982-05-16", "hobby" : "diving"}
  33. { "index" : { "_id" :3, "parent" : "liverpool" }}
  34. { "name" : "Barry Smith", "dob" : "1970-04-05", "hobby" : "hiking"}
  35. { "index" : { "_id" :4, "parent" : "liverpool" }}
  36. { "name" : "Adrien Grand", "dob" : "1987-10-24", "hobby" : "horses"}
  37. 查询1980年以后出生的员工在哪些分支机构(通过查询子文档关联查询父文档):
  38. post localhost:9200/company/branch/_search
  39. {
  40. "query": {
  41. "has_child": {
  42. "type": "employee",
  43. "query": {
  44. "range": {
  45. "dob": {"gte": "1980-01-01"}
  46. }
  47. }
  48. }
  49. }
  50. }
  51. 查询分支机构UK有哪些员工(通过父文档查询子文档):
  52. post localhost:9200/company/employee/_search
  53. {
  54. "query": {
  55. "has_parent": {
  56. "type": "branch",
  57. "query": {
  58. "match": {
  59. "country": "UK"
  60. }
  61. }
  62. }
  63. }
  64. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/539269
推荐阅读
相关标签
  

闽ICP备14008679号