geo-shape-query.asciidoc 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. [[query-dsl-geo-shape-query]]
  2. === GeoShape Query
  3. Filter documents indexed using the `geo_shape` type.
  4. Requires the <<geo-shape,`geo_shape` Mapping>>.
  5. The `geo_shape` query uses the same grid square representation as the
  6. `geo_shape` mapping to find documents that have a shape that intersects
  7. with the query shape. It will also use the same Prefix Tree configuration
  8. as defined for the field mapping.
  9. The query supports two ways of defining the query shape, either by
  10. providing a whole shape definition, or by referencing the name of a shape
  11. pre-indexed in another index. Both formats are defined below with
  12. examples.
  13. ==== Inline Shape Definition
  14. Similar to the `geo_shape` type, the `geo_shape` query uses
  15. http://www.geojson.org[GeoJSON] to represent shapes.
  16. Given the following index:
  17. [source,js]
  18. --------------------------------------------------
  19. PUT /example
  20. {
  21. "mappings": {
  22. "properties": {
  23. "location": {
  24. "type": "geo_shape"
  25. }
  26. }
  27. }
  28. }
  29. POST /example/_doc?refresh
  30. {
  31. "name": "Wind & Wetter, Berlin, Germany",
  32. "location": {
  33. "type": "point",
  34. "coordinates": [13.400544, 52.530286]
  35. }
  36. }
  37. --------------------------------------------------
  38. // CONSOLE
  39. // TESTSETUP
  40. The following query will find the point using the Elasticsearch's
  41. `envelope` GeoJSON extension:
  42. [source,js]
  43. --------------------------------------------------
  44. GET /example/_search
  45. {
  46. "query":{
  47. "bool": {
  48. "must": {
  49. "match_all": {}
  50. },
  51. "filter": {
  52. "geo_shape": {
  53. "location": {
  54. "shape": {
  55. "type": "envelope",
  56. "coordinates" : [[13.0, 53.0], [14.0, 52.0]]
  57. },
  58. "relation": "within"
  59. }
  60. }
  61. }
  62. }
  63. }
  64. }
  65. --------------------------------------------------
  66. // CONSOLE
  67. ==== Pre-Indexed Shape
  68. The Query also supports using a shape which has already been indexed in
  69. another index. This is particularly useful for when
  70. you have a pre-defined list of shapes which are useful to your
  71. application and you want to reference this using a logical name (for
  72. example 'New Zealand') rather than having to provide their coordinates
  73. each time. In this situation it is only necessary to provide:
  74. * `id` - The ID of the document that containing the pre-indexed shape.
  75. * `index` - Name of the index where the pre-indexed shape is. Defaults
  76. to 'shapes'.
  77. * `path` - The field specified as path containing the pre-indexed shape.
  78. Defaults to 'shape'.
  79. * `routing` - The routing of the shape document if required.
  80. The following is an example of using the Filter with a pre-indexed
  81. shape:
  82. [source,js]
  83. --------------------------------------------------
  84. PUT /shapes
  85. {
  86. "mappings": {
  87. "properties": {
  88. "location": {
  89. "type": "geo_shape"
  90. }
  91. }
  92. }
  93. }
  94. PUT /shapes/_doc/deu
  95. {
  96. "location": {
  97. "type": "envelope",
  98. "coordinates" : [[13.0, 53.0], [14.0, 52.0]]
  99. }
  100. }
  101. GET /example/_search
  102. {
  103. "query": {
  104. "bool": {
  105. "filter": {
  106. "geo_shape": {
  107. "location": {
  108. "indexed_shape": {
  109. "index": "shapes",
  110. "id": "deu",
  111. "path": "location"
  112. }
  113. }
  114. }
  115. }
  116. }
  117. }
  118. }
  119. --------------------------------------------------
  120. // CONSOLE
  121. ==== Spatial Relations
  122. The <<spatial-strategy, geo_shape strategy>> mapping parameter determines
  123. which spatial relation operators may be used at search time.
  124. The following is a complete list of spatial relation operators available:
  125. * `INTERSECTS` - (default) Return all documents whose `geo_shape` field
  126. intersects the query geometry.
  127. * `DISJOINT` - Return all documents whose `geo_shape` field
  128. has nothing in common with the query geometry.
  129. * `WITHIN` - Return all documents whose `geo_shape` field
  130. is within the query geometry.
  131. * `CONTAINS` - Return all documents whose `geo_shape` field
  132. contains the query geometry. Note: this is only supported using the
  133. `recursive` Prefix Tree Strategy deprecated[6.6]
  134. [float]
  135. ==== Ignore Unmapped
  136. When set to `true` the `ignore_unmapped` option will ignore an unmapped field
  137. and will not match any documents for this query. This can be useful when
  138. querying multiple indexes which might have different mappings. When set to
  139. `false` (the default value) the query will throw an exception if the field
  140. is not mapped.