2017-01-31 6 views
0

Twitter의 Place geo bounding_box 배열에 대한 Elasticsearch 매핑을 만들려고하고 있으며이를 Elasticsearch에서 지역 경계 상자로 색인화 할 수 없습니다. 내 응용 프로그램에서는 Twitter4j에서 원시 JSON을 가져 오지만 경계 상자는 경계 상자를 닫지 않으므로이 테스트의 목적 상 json을 편집하고 닫습니다. 나는 Elastic cloud (ES v5)와 Rest API를 사용하고 Kibana로 시각화하고 있습니다.Twitter 경계 상자의 탄성 검색 색인이 geo_shape로 인식되지 않습니다.

다음은 사용하려는 매핑입니다. "속성"블록을 사용하거나 사용하지 않고 여러 변형을 시도했지만 작동하지 않습니다. 이 맵핑을 사용하면 맵핑을 성공적으로 PUT 할 수 있지만, 문서를 POST 할 때 Kibana는 h 열을 알 수없는 필드 유형으로 인식합니다.

포인트 좌표 필드는 그냥 괜찮은 지오 포인트로 색인화됩니다. 그렇지 않은 경계 상자입니다. 내가 POST (참고로 노력하고 문서의 미리보기

PUT/testgeo 여기

{ 
    "mappings": { 
     "tweet": { 
      "_all": { 
       "enabled": false 
      }, 
      "properties": { 
       "created_at": { 
        "type": "date", 
        "format": "EEE MMM dd HH:mm:ss Z YYYY||strict_date_optional_time||epoch_millis" 
       }, 
       "coordinates": { 
        "properties": { 
         "coordinates": { 
          "type": "geo_point", 
          "ignore_malformed": true 
         } 
        } 
       }, 
       "place": { 
        "properties": { 
         "bounding_box": { 
          "type": "geo_shape", 
          "tree": "quadtree", 
          "precision": "1m" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

됩니다 : 여기

내 매핑 I 수동으로 경계 상자를 닫습니다 5 배열 요소를 추가). 사람이 이유를 확인하고 수정할 수 있습니다 경우

POST/testgeo/짹짹

/1

{ 
    ... 
    "coordinates": { 
     "type": "point", 
     "coordinates": [ 
      0.78055556, 
      51.97222222 
     ] 
    }, 
    "place": { 
     "id": "0c31a1a5b970086e", 
     "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/0c31a1a5b970086e.json", 
     "place_type": "city", 
     "name": "Bures", 
     "full_name": "Bures, England", 
     "country_code": "GB", 
     "country": "United Kingdom", 
     "bounding_box": { 
      "type": "polygon", 
      "coordinates": [ 
       [ 
        [ 
         0.773779, 
         51.96971 
        ], 
        [ 
         0.773779, 
         51.976437 
        ], 
        [ 
         0.781794, 
         51.976437 
        ], 
        [ 
         0.781794, 
         51.96971 
        ], 
        [ 
         0.773779, 
         51.96971 
        ] 
       ] 
      ] 
     }, 
     "attributes": { 
     } 
    }, 

, 내가 가장 감사 할 것이다.

참고 1 : : Elastic의 geo_shape 문서 페이지의 매핑 및 문서 예제를 사용하여 Kibana가 위치 필드를 알 수없는 유형으로 다시 표시했습니다.

PUT/testgeo

{ 
    "mappings": { 
     "tweet": { 
      "_all": { 
       "enabled": false 
      }, 
      "properties": { 
       "location": { 
        "type": "geo_shape", 
        "tree": "quadtree", 
        "precision": "1m" 
       } 
      } 
     } 
    } 
} 

POST/testgeo/짹짹/1

{ 
    "location" : { 
     "type" : "polygon", 
     "coordinates" : [ 
      [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] 
     ] 
    } 
} 

답변

0

가 키바는 단순히 GeoShape의의 형태를 반영한다는 것을 밝혀졌습니다. 그러나 지오 쿼리를 수행 할 때 Elasticsearch는 올바른 결과를 반환합니다. 예를 들어

:

당신은 그냥 같은 geo_shape에 대한 매핑에 coerce 옵션을 사용하여이 문제에 대한 지금 수정이 말하고 싶었다 문제에 대한 해결책을 찾을 것 같다 비록
"query": { 
    "bool": { 
     "must": { 
     "match_all": {} 
     }, 
     "filter": { 
     "geo_shape": { 
      "place.bounding_box": { 
      "shape": { 
       "type": "polygon", 
       "coordinates": [ 
       [ 
        [ 
         0.773779, 
         51.96971 
        ], 
        [ 
         0.773779, 
         51.976437 
        ], 
        [ 
         0.781794, 
         51.976437 
        ], 
        [ 
         0.781794, 
         51.96971 
        ], 
        [ 
         0.773779, 
         51.96971 
        ] 
       ] 
       ] 
      }, 
      "relation": "within" 
      } 
     } 
     } 
    } 
    } 
}