ポイントフィールドタイプ

point データタイプは、2次元平面座標系において任意の x, y ペアのインデックス作成と検索を容易にします。

このタイプを使用してドキュメントをクエリするには、shape Queryを使用します。

geo_shapegeo_point と同様に、pointGeoJSON および Well-Known Text 形式で指定できます。ただし、便利さと歴史的理由からサポートされている追加の形式がいくつかあります。合計で、デカルト点を指定する方法は5つあり、以下に示します:

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "location": {
  6. "type": "point"
  7. }
  8. }
  9. },
  10. )
  11. print(resp)
  12. resp1 = client.index(
  13. index="my-index-000001",
  14. id="1",
  15. document={
  16. "text": "Point as an object using GeoJSON format",
  17. "location": {
  18. "type": "Point",
  19. "coordinates": [
  20. -71.34,
  21. 41.12
  22. ]
  23. }
  24. },
  25. )
  26. print(resp1)
  27. resp2 = client.index(
  28. index="my-index-000001",
  29. id="2",
  30. document={
  31. "text": "Point as a WKT POINT primitive",
  32. "location": "POINT (-71.34 41.12)"
  33. },
  34. )
  35. print(resp2)
  36. resp3 = client.index(
  37. index="my-index-000001",
  38. id="3",
  39. document={
  40. "text": "Point as an object with 'x' and 'y' keys",
  41. "location": {
  42. "x": -71.34,
  43. "y": 41.12
  44. }
  45. },
  46. )
  47. print(resp3)
  48. resp4 = client.index(
  49. index="my-index-000001",
  50. id="4",
  51. document={
  52. "text": "Point as an array",
  53. "location": [
  54. -71.34,
  55. 41.12
  56. ]
  57. },
  58. )
  59. print(resp4)
  60. resp5 = client.index(
  61. index="my-index-000001",
  62. id="5",
  63. document={
  64. "text": "Point as a string",
  65. "location": "-71.34,41.12"
  66. },
  67. )
  68. print(resp5)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. location: {
  7. type: 'point'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response
  14. response = client.index(
  15. index: 'my-index-000001',
  16. id: 1,
  17. body: {
  18. text: 'Point as an object using GeoJSON format',
  19. location: {
  20. type: 'Point',
  21. coordinates: [
  22. -71.34,
  23. 41.12
  24. ]
  25. }
  26. }
  27. )
  28. puts response
  29. response = client.index(
  30. index: 'my-index-000001',
  31. id: 2,
  32. body: {
  33. text: 'Point as a WKT POINT primitive',
  34. location: 'POINT (-71.34 41.12)'
  35. }
  36. )
  37. puts response
  38. response = client.index(
  39. index: 'my-index-000001',
  40. id: 3,
  41. body: {
  42. text: "Point as an object with 'x' and 'y' keys",
  43. location: {
  44. x: -71.34,
  45. y: 41.12
  46. }
  47. }
  48. )
  49. puts response
  50. response = client.index(
  51. index: 'my-index-000001',
  52. id: 4,
  53. body: {
  54. text: 'Point as an array',
  55. location: [
  56. -71.34,
  57. 41.12
  58. ]
  59. }
  60. )
  61. puts response
  62. response = client.index(
  63. index: 'my-index-000001',
  64. id: 5,
  65. body: {
  66. text: 'Point as a string',
  67. location: '-71.34,41.12'
  68. }
  69. )
  70. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. location: {
  6. type: "point",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);
  12. const response1 = await client.index({
  13. index: "my-index-000001",
  14. id: 1,
  15. document: {
  16. text: "Point as an object using GeoJSON format",
  17. location: {
  18. type: "Point",
  19. coordinates: [-71.34, 41.12],
  20. },
  21. },
  22. });
  23. console.log(response1);
  24. const response2 = await client.index({
  25. index: "my-index-000001",
  26. id: 2,
  27. document: {
  28. text: "Point as a WKT POINT primitive",
  29. location: "POINT (-71.34 41.12)",
  30. },
  31. });
  32. console.log(response2);
  33. const response3 = await client.index({
  34. index: "my-index-000001",
  35. id: 3,
  36. document: {
  37. text: "Point as an object with 'x' and 'y' keys",
  38. location: {
  39. x: -71.34,
  40. y: 41.12,
  41. },
  42. },
  43. });
  44. console.log(response3);
  45. const response4 = await client.index({
  46. index: "my-index-000001",
  47. id: 4,
  48. document: {
  49. text: "Point as an array",
  50. location: [-71.34, 41.12],
  51. },
  52. });
  53. console.log(response4);
  54. const response5 = await client.index({
  55. index: "my-index-000001",
  56. id: 5,
  57. document: {
  58. text: "Point as a string",
  59. location: "-71.34,41.12",
  60. },
  61. });
  62. console.log(response5);

コンソール

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "location": {
  6. "type": "point"
  7. }
  8. }
  9. }
  10. }
  11. PUT my-index-000001/_doc/1
  12. {
  13. "text": "Point as an object using GeoJSON format",
  14. "location": {
  15. "type": "Point",
  16. "coordinates": [-71.34, 41.12]
  17. }
  18. }
  19. PUT my-index-000001/_doc/2
  20. {
  21. "text": "Point as a WKT POINT primitive",
  22. "location" : "POINT (-71.34 41.12)"
  23. }
  24. PUT my-index-000001/_doc/3
  25. {
  26. "text": "Point as an object with 'x' and 'y' keys",
  27. "location": {
  28. "x": -71.34,
  29. "y": 41.12
  30. }
  31. }
  32. PUT my-index-000001/_doc/4
  33. {
  34. "text": "Point as an array",
  35. "location": [ -71.34, 41.12 ]
  36. }
  37. PUT my-index-000001/_doc/5
  38. {
  39. "text": "Point as a string",
  40. "location": "-71.34,41.12"
  41. }
GeoJSON 形式で type および coordinates キーを持つオブジェクトとして表現されたポイント。
Well-Known Text 形式の POINT として表現されたポイント: "POINT(x y)"
x および y キーを持つオブジェクトとして表現されたポイント。
形式: [ x, y] の配列として表現されたポイント。
形式: "x,y" の文字列として表現されたポイント。

geo-point フィールドタイプの場合とは異なり、上記のすべての形式で座標 x および y の順序は同じです。

インデクサに提供される座標は単精度浮動小数点値であるため、フィールドは Java 仮想マシンによって提供されるのと同じ精度を保証します(通常は 1E-38)。

ポイントフィールドのパラメータ

以下のパラメータは point フィールドで受け入れられます:

ignore_malformed true の場合、誤ったポイントは無視されます。false (デフォルト) の場合、
誤ったポイントは例外をスローし、ドキュメント全体が拒否されます。
ignore_z_value true (デフォルト) の場合、3次元ポイントが受け入れられ(ソースに保存されます)
ただし、x および y 値のみがインデックスされ、3次元は無視されます。false の場合、x および y の値(2次元)以外のポイントは例外をスローし、ドキュメント全体が拒否されます。
null_value 明示的な null 値の代わりに使用されるポイント値を受け入れます。
デフォルトは null で、これはフィールドが欠落していると見なされることを意味します。

ポイントのソートと取得

現在、ポイントをソートしたり、そのフィールドを直接取得したりすることはできません。point 値は _source フィールドを通じてのみ取得可能です。