ジオポリゴンクエリ

7.12で非推奨。

Geoshapeを使用してください。ここでは、ポリゴンがGeoJSONまたはWell-Known Text (WKT)で定義されています。

ポイントのポリゴン内にのみヒットを返すクエリです。以下はその例です:

Python

  1. resp = client.search(
  2. query={
  3. "bool": {
  4. "must": {
  5. "match_all": {}
  6. },
  7. "filter": {
  8. "geo_polygon": {
  9. "person.location": {
  10. "points": [
  11. {
  12. "lat": 40,
  13. "lon": -70
  14. },
  15. {
  16. "lat": 30,
  17. "lon": -80
  18. },
  19. {
  20. "lat": 20,
  21. "lon": -90
  22. }
  23. ]
  24. }
  25. }
  26. }
  27. }
  28. },
  29. )
  30. print(resp)

Js

  1. const response = await client.search({
  2. query: {
  3. bool: {
  4. must: {
  5. match_all: {},
  6. },
  7. filter: {
  8. geo_polygon: {
  9. "person.location": {
  10. points: [
  11. {
  12. lat: 40,
  13. lon: -70,
  14. },
  15. {
  16. lat: 30,
  17. lon: -80,
  18. },
  19. {
  20. lat: 20,
  21. lon: -90,
  22. },
  23. ],
  24. },
  25. },
  26. },
  27. },
  28. },
  29. });
  30. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": {
  6. "match_all": {}
  7. },
  8. "filter": {
  9. "geo_polygon": {
  10. "person.location": {
  11. "points": [
  12. { "lat": 40, "lon": -70 },
  13. { "lat": 30, "lon": -80 },
  14. { "lat": 20, "lon": -90 }
  15. ]
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

クエリオプション

オプション 説明
_name フィルターを識別するためのオプションの名前フィールド
validation_method IGNORE_MALFORMEDに設定すると、無効な緯度または経度を持つジオポイントを受け入れ、COERCEに設定すると正しい緯度または経度を推測しようとし、STRICT(デフォルトはSTRICT)に設定します。

許可されるフォーマット

配列としての緯度経度

フォーマットは[lon, lat]

注:ここでのlon/latの順序はGeoJSONに準拠する必要があります。

Python

  1. resp = client.search(
  2. query={
  3. "bool": {
  4. "must": {
  5. "match_all": {}
  6. },
  7. "filter": {
  8. "geo_polygon": {
  9. "person.location": {
  10. "points": [
  11. [
  12. -70,
  13. 40
  14. ],
  15. [
  16. -80,
  17. 30
  18. ],
  19. [
  20. -90,
  21. 20
  22. ]
  23. ]
  24. }
  25. }
  26. }
  27. }
  28. },
  29. )
  30. print(resp)

Js

  1. const response = await client.search({
  2. query: {
  3. bool: {
  4. must: {
  5. match_all: {},
  6. },
  7. filter: {
  8. geo_polygon: {
  9. "person.location": {
  10. points: [
  11. [-70, 40],
  12. [-80, 30],
  13. [-90, 20],
  14. ],
  15. },
  16. },
  17. },
  18. },
  19. },
  20. });
  21. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": {
  6. "match_all": {}
  7. },
  8. "filter": {
  9. "geo_polygon": {
  10. "person.location": {
  11. "points": [
  12. [ -70, 40 ],
  13. [ -80, 30 ],
  14. [ -90, 20 ]
  15. ]
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

文字列としての緯度経度

  1. #### Python
  2. ``````python
  3. resp = client.search(
  4. query={
  5. "bool": {
  6. "must": {
  7. "match_all": {}
  8. },
  9. "filter": {
  10. "geo_polygon": {
  11. "person.location": {
  12. "points": [
  13. "40, -70",
  14. "30, -80",
  15. "20, -90"
  16. ]
  17. }
  18. }
  19. }
  20. }
  21. },
  22. )
  23. print(resp)
  24. `

Js

  1. const response = await client.search({
  2. query: {
  3. bool: {
  4. must: {
  5. match_all: {},
  6. },
  7. filter: {
  8. geo_polygon: {
  9. "person.location": {
  10. points: ["40, -70", "30, -80", "20, -90"],
  11. },
  12. },
  13. },
  14. },
  15. },
  16. });
  17. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": {
  6. "match_all": {}
  7. },
  8. "filter": {
  9. "geo_polygon": {
  10. "person.location": {
  11. "points": [
  12. "40, -70",
  13. "30, -80",
  14. "20, -90"
  15. ]
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

ジオハッシュ

Python

  1. resp = client.search(
  2. query={
  3. "bool": {
  4. "must": {
  5. "match_all": {}
  6. },
  7. "filter": {
  8. "geo_polygon": {
  9. "person.location": {
  10. "points": [
  11. "drn5x1g8cu2y",
  12. "30, -80",
  13. "20, -90"
  14. ]
  15. }
  16. }
  17. }
  18. }
  19. },
  20. )
  21. print(resp)

Js

  1. const response = await client.search({
  2. query: {
  3. bool: {
  4. must: {
  5. match_all: {},
  6. },
  7. filter: {
  8. geo_polygon: {
  9. "person.location": {
  10. points: ["drn5x1g8cu2y", "30, -80", "20, -90"],
  11. },
  12. },
  13. },
  14. },
  15. },
  16. });
  17. console.log(response);

コンソール

  1. GET /_search
  2. {
  3. "query": {
  4. "bool": {
  5. "must": {
  6. "match_all": {}
  7. },
  8. "filter": {
  9. "geo_polygon": {
  10. "person.location": {
  11. "points": [
  12. "drn5x1g8cu2y",
  13. "30, -80",
  14. "20, -90"
  15. ]
  16. }
  17. }
  18. }
  19. }
  20. }
  21. }

geo_pointタイプ

クエリは、関連フィールドにgeo_pointタイプが設定されていることを要求します。

未マップを無視

trueに設定すると、ignore_unmappedオプションは未マップフィールドを無視し、このクエリに対してドキュメントと一致しません。これは、異なるマッピングを持つ複数のインデックスをクエリする際に便利です。false(デフォルト値)に設定すると、フィールドがマップされていない場合、クエリは例外をスローします。